using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using System.Web; namespace Nop.Core.Utils
{
public static class RequestUtility
{
///
/// 使用Get方法获取字符串结果(暂时没有加入Cookie)
///
///
///
public static string HttpGet(string url, Encoding encoding = null)
{
WebClient wc = new WebClient();
wc.Encoding = encoding ?? Encoding.UTF8;
//if (encoding != null)
//{
// wc.Encoding = encoding;
//}
return wc.DownloadString(url);
} public static dynamic HttpGet(string url)
{
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var response = client.GetAsync(url).Result; //result返回值
string result = response.Content.ReadAsStringAsync().Result; return result;
} ///
/// Post数据
///
/// 模型
/// server uri
/// 数据模型
///
public static string Put(string requestUri, T model, IDictionary parameters = null)
{
HttpClient client = new HttpClient();
if (parameters != null && parameters.Count > 0)
{
foreach (var item in parameters)
{
client.DefaultRequestHeaders.Add(item.Key, item.Value);
}
} HttpResponseMessage message = client.PutAsJsonAsync(requestUri, model).Result;
if (message.IsSuccessStatusCode)
{
return message.Content.ReadAsStringAsync().Result;
}
return null; } ///
/// 使用Get方法获取字符串结果(暂时没有加入Cookie),parameters字典里面东西会通过循环在request.Headers中添加
///
///
///
public static string HttpGet(string url, IDictionary parameters = null, Encoding encoding = null)
{
Encoding readCoding = encoding ?? Encoding.UTF8; Uri requestUri = new Uri(url);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUri);
request.UserAgent = "mozilla/4.0 (compatible; msie 6.0; windows 2000)";
request.Method = "Get";
request.ContentType = "application/x-www-form-urlencoded"; if (parameters != null && parameters.Count > 0)
{
foreach (var item in parameters)
{
request.Headers.Add(item.Key, item.Value);
}
} HttpWebResponse response = null;
try
{
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
//若是远程服务器抛出了异常,则捕获并解析
response = (HttpWebResponse)ex.Response;
} using (StreamReader sr = new StreamReader(response.GetResponseStream(), readCoding))
{
string content = sr.ReadToEnd();
return content;
}
}
finally
{
//释放请求的资源
if (response != null)
{
response.Close();
response = null;
}
if (request != null)
{
request.Abort();
}
}
} ///
///
///
///
/// 例如Encoding.UTF8.GetBytes(json.Serialize(new { email = "123456@qq.com", password = "111111" }))
/// 字典里面东西会通过循环在request.Headers中添加
///
///
public static string HttpPost(string url, byte[] postStream, IDictionary parameters = null, Encoding encoding = null)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ProtocolVersion = HttpVersion.Version11;
request.Method = "POST"; if (parameters != null && parameters.Count > 0)
{
foreach (var item in parameters)
{
request.Headers.Add(item.Key, item.Value);
}
} request.ContentType = "application/json;charset=utf-8";
request.Accept = "application/json"; request.Timeout = 60 * 2 * 1000; // 同步接口 调用时间2分钟
request.ServicePoint.Expect100Continue = false; HttpWebResponse response = null;
try
{
postStream = postStream ?? new byte[] { };
request.ContentLength = postStream.Length;
var requestStream = request.GetRequestStream();
requestStream.Write(postStream, 0, postStream.Length);
requestStream.Close();
response = (HttpWebResponse)request.GetResponse();
using (var responseStream = response.GetResponseStream())
{
if (responseStream != null)
{
using (StreamReader myStreamReader = new StreamReader(responseStream, encoding ?? Encoding.UTF8))
{
return myStreamReader.ReadToEnd();
}
}
}
}
catch (Exception ex)
{ }
finally
{
if (response != null)
{
response.Close();
}
request.Abort();
}
return "";
} ///
/// Post数据
///
/// 模型
/// server uri
/// 数据模型
///
public static string Post(string requestUri, T model, IDictionary parameters = null)
{
HttpClient client = new HttpClient();
if (parameters != null && parameters.Count > 0)
{
foreach (var item in parameters)
{
client.DefaultRequestHeaders.Add(item.Key, item.Value);
}
} HttpResponseMessage message = client.PostAsJsonAsync(requestUri, model).Result;
if (message.IsSuccessStatusCode)
{
return message.Content.ReadAsStringAsync().Result;
}
return null; }
///
/// 使用Post方法获取字符串结果
///
///
public static string HttpPost(string url, CookieContainer cookieContainer = null, Dictionary formData = null, Encoding encoding = null)
{
return HttpPost(url, cookieContainer, formData, encoding, 12000);
}
public static string HttpPost(string url, CookieContainer cookieContainer = null, Dictionary formData = null, Encoding encoding = null, int timeout = 20)
{
string dataString = GetQueryString(formData);
var formDataBytes = formData == null ? new byte[0] : (encoding == null ? Encoding.UTF8.GetBytes(dataString) : encoding.GetBytes(dataString));
using (MemoryStream ms = new MemoryStream())
{
ms.Write(formDataBytes, 0, formDataBytes.Length);
ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置
string ret = HttpPost(url, cookieContainer, ms, false, encoding, timeout);
return ret;
}
}
///
/// 使用Post方法获取字符串结果
///
///
///
public static string HttpPost(string url, CookieContainer cookieContainer = null, string fileName = null, Encoding encoding = null)
{
//读取文件
FileStream fileStream = null;
if (!string.IsNullOrEmpty(fileName) && File.Exists(fileName))
{
fileStream = new FileStream(fileName, FileMode.Open);
}
return HttpPost(url, cookieContainer, fileStream, true, encoding);
} ///
/// 使用Post方法获取字符串结果
///
///
///
///
/// postStreams是否是文件流
///
public static string HttpPost(string url, CookieContainer cookieContainer = null, Stream postStream = null, bool isFile = false, Encoding encoding = null, int timeout = 1200000)
{
ServicePointManager.DefaultConnectionLimit = 200;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postStream != null ? postStream.Length : 0;
request.Timeout = timeout;
if (cookieContainer != null)
{
request.CookieContainer = cookieContainer;
}
if (postStream != null)
{
//postStream.Position = 0; //上传文件流
Stream requestStream = request.GetRequestStream(); byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = postStream.Read(buffer, 0, buffer.Length)) != 0)
{
requestStream.Write(buffer, 0, bytesRead);
} postStream.Close();//关闭文件访问
}
HttpWebResponse response = null;
try
{
response = (HttpWebResponse)request.GetResponse(); if (cookieContainer != null)
{
response.Cookies = cookieContainer.GetCookies(response.ResponseUri);
} using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader myStreamReader = new StreamReader(responseStream, encoding ?? Encoding.GetEncoding("utf-8")))
{
string retString = myStreamReader.ReadToEnd();
return retString;
}
}
}
catch (Exception ex)
{
return "";
}
finally
{
if (response != null)
{
response.Close();
response = null;
}
if (request != null)
{
request.Abort();
}
} } ///
/// 请求是否发起自微信客户端的浏览器
///
///
///
public static bool IsWeixinClientRequest(this HttpContext httpContext)
{
return !string.IsNullOrEmpty(httpContext.Request.UserAgent) &&
httpContext.Request.UserAgent.Contains("MicroMessenger");
} ///
/// 组装QueryString的方法
/// 参数之间用&连接,首位没有符号,如:a=1&b=2&c=3
///
///
///
public static string GetQueryString(this Dictionary formData)
{
if (formData == null || formData.Count == 0)
{
return "";
} StringBuilder sb = new StringBuilder(); var i = 0;
foreach (var kv in formData)
{
i++;
sb.AppendFormat("{0}={1}", kv.Key, kv.Value);
if (i < formData.Count)
{
sb.Append("&");
}
} return sb.ToString();
} ///
/// 封装System.Web.HttpUtility.HtmlEncode
///
///
///
public static string HtmlEncode(this string html)
{
return System.Web.HttpUtility.HtmlEncode(html);
}
///
/// 封装System.Web.HttpUtility.HtmlDecode
///
///
///
public static string HtmlDecode(this string html)
{
return System.Web.HttpUtility.HtmlDecode(html);
}
///
/// 封装System.Web.HttpUtility.UrlEncode
///
///
///
public static string UrlEncode(this string url)
{
return System.Web.HttpUtility.UrlEncode(url);
}
///
/// 封装System.Web.HttpUtility.UrlDecode
///
///
///
public static string UrlDecode(this string url)
{
return System.Web.HttpUtility.UrlDecode(url);
}
}
public class AsyncRequestUtility
{
public Action OnPostSuccess { get; set; }
public void HttpPost(string url, CookieContainer cookieContainer = null, Dictionary formData = null, Encoding encoding = null)
{
HttpPost(url, cookieContainer, formData, encoding, 12000);
}
public void HttpPost(string url, CookieContainer cookieContainer = null, Dictionary formData = null, Encoding encoding = null, int timeout = 20)
{
string dataString = GetQueryString(formData);
var formDataBytes = formData == null ? new byte[0] : Encoding.UTF8.GetBytes(dataString);
using (MemoryStream ms = new MemoryStream())
{
ms.Write(formDataBytes, 0, formDataBytes.Length);
ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置
HttpPost(url, cookieContainer, ms, false, encoding, timeout);
}
}
///
/// 使用Post方法获取字符串结果
///
///
///
public void HttpPost(string url, CookieContainer cookieContainer = null, string fileName = null, Encoding encoding = null)
{
//读取文件
FileStream fileStream = null;
if (!string.IsNullOrEmpty(fileName) && File.Exists(fileName))
{
fileStream = new FileStream(fileName, FileMode.Open);
}
HttpPost(url, cookieContainer, fileStream, true, encoding);
}
public void HttpPost(string url, CookieContainer cookieContainer = null, Stream postStream = null, bool isFile = false, Encoding encoding = null, int timeout = 1200000)
{
ServicePointManager.DefaultConnectionLimit = 200;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postStream != null ? postStream.Length : 0;
request.Timeout = timeout;
if (cookieContainer != null)
{
request.CookieContainer = cookieContainer;
}
if (postStream != null)
{
//postStream.Position = 0; //上传文件流
Stream requestStream = request.GetRequestStream(); byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = postStream.Read(buffer, 0, buffer.Length)) != 0)
{
requestStream.Write(buffer, 0, bytesRead);
} postStream.Close();//关闭文件访问
}
request.BeginGetResponse(new AsyncCallback(this.ResponseCallback), request);
}
private void ResponseCallback(IAsyncResult ar)
{
HttpWebRequest req = (HttpWebRequest)ar.AsyncState; ;
HttpWebResponse resp = null;
try
{
resp = (HttpWebResponse)req.EndGetResponse(ar);
string content = "";
using (Stream responseStream = resp.GetResponseStream())
{
using (StreamReader sr = new StreamReader(responseStream, Encoding.UTF8))
{
content = sr.ReadToEnd();
}
} if (OnPostSuccess != null)
{
OnPostSuccess(content);
} }
finally
{
if (resp != null)
{
resp.Close();
resp.Dispose();
}
req.Abort();
} }
private string GetQueryString(Dictionary formData)
{
if (formData == null || formData.Count == 0)
{
return "";
} StringBuilder sb = new StringBuilder(); var i = 0;
foreach (var kv in formData)
{
i++;
sb.AppendFormat("{0}={1}", kv.Key, kv.Value);
if (i < formData.Count)
{
sb.Append("&");
}
} return sb.ToString();
}
}
}

Http请求帮助类的更多相关文章

  1. WebUtils-网络请求工具类

    网络请求工具类,大幅代码借鉴aplipay. using System; using System.Collections.Generic; using System.IO; using System ...

  2. Http、Https请求工具类

    最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...

  3. 微信https请求工具类

    工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...

  4. HTTP请求工具类

    HTTP请求工具类,适用于微信服务器请求,可以自测 代码; /// <summary> /// HTTP请求工具类 /// </summary> public class Ht ...

  5. Java请求参数类QueryParameter

    import java.util.HashMap; import java.util.Map; import org.apache.commons.lang.StringUtils; /** * 请求 ...

  6. 实现一个简单的http请求工具类

    OC自带的http请求用起来不直观,asihttprequest库又太大了,依赖也多,下面实现一个简单的http请求工具类 四个文件源码大致如下,还有优化空间 MYHttpRequest.h(类定义, ...

  7. 远程Get,Post请求工具类

    1.远程请求工具类   import java.io.*; import java.net.URL; import java.net.URLConnection; import java.util.L ...

  8. C#实现的UDP收发请求工具类实例

    本文实例讲述了C#实现的UDP收发请求工具类.分享给大家供大家参考,具体如下: 初始化: ListeningPort = int.Parse(ConfigurationManager.AppSetti ...

  9. ajax请求工具类

    ajax的get和post请求工具类: /** * 公共方法类 *  * 使用  变量名=function()定义函数时,如果在变量名前加var,则这个变量变成局部变量 */var Common = ...

  10. 【原创】标准HTTP请求工具类

    以下是个人在项目开发过程中,总结的Http请求工具类,主要包括四种: 1.处理http POST请求[XML格式.无解压]: 2.处理http GET请求[XML格式.无解压]: 3.处理http P ...

随机推荐

  1. Linux分区之parted命令

      之前使用最多的分区命令无疑是fdisk了,大多数情况下fdisk可以满足日常工作上的需求,极个别情况就需要使用parted命令了,至于及个别情况就要从MBR和GPT说起. MBR主引导扇区   主 ...

  2. CefSharp 支持mp4

    效果图: 下载链接:创建wpf项目引用 如下:链接:链接: https://pan.baidu.com/s/1UCJmslLPSDph7VrYhXM9gw 密码: j3n4 链接: https://p ...

  3. 【mock】后端不来过夜半,闲敲mock落灯花 (mockjs+Vuex+Vue实战)

      mock的由来[假]   赵师秀:南宋时期的一位前端工程师 诗词背景:在一个梅雨纷纷的夜晚,正处于项目编码阶段,书童却带来消息:写后端的李秀才在几个时辰前就赶往临安度假去了,!此时手头仅有一个简单 ...

  4. XGBoost,GBDT原理详解,与lightgbm比较

    xgb原理: https://www.jianshu.com/p/7467e616f227 https://blog.csdn.net/a819825294/article/details/51206 ...

  5. SAP接口的调用

    最近做一个专案用到的SAO接口的调用,用到的上传参数获取回传的IRfcTable,以及以IRfcTable作为参数上传SAP,通过查阅很多资料,发现资料说明的也多是鱼龙混杂,许多没有实现就直接贴在上面 ...

  6. [ActionScript 3.0] 有必要记录一下:flash builder运用Animate CC 发布的swc的一个奇葩问题,亲测

    之前一直用flash cs6 发布swc 配合flash builder4.6开发,最近用Animate CC发布swc,却出现无法flash builder4.6 无法连接到调试器的问题, 经过反复 ...

  7. iOS开发笔记-图标和图片大小官方最新标准

    这两天开发iOS app用到了Tab bar,然后随便切了点图标放上去发现效果极差.于是乎,开始查找苹果官方给的标准.搜索一番后,看到了一篇博文,但其内容与iOS人机交互指南最新版内容不符. 故此,在 ...

  8. 【xsy2818】 最近点 动态树分治+可持久化线段树

    题目大意:给你一颗n个节点的树,最初点集S为空. 有m次操作:往当前点集S中加入/删除一个点,询问点x至集合S中任意点的最小距离,回到第t次修改点集的操作后的状态. 数据范围:$n,m≤10^5$ 我 ...

  9. [原创]K8正方系统密码解密工具

    工具: K8_zfsoftDecode编译: 自己查壳组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http://qqhack8.blog.163.com发布: 2015/8/1 1 ...

  10. Docker数据管理(五)

    一.什么是数据卷 生成环境中使用docker的过程中,往往需要对数据进行持久化,或者需要多个容器之间进行数据共享,这个就涉及到了容器数据管理 容器中管理数据主要有两种方式: 数据卷:容器内数据之间映射 ...