您的位置:首页 > 理论基础 > 计算机网络

有关HTTP请求的辅助类

2016-03-03 11:09 501 查看
/// <summary>
/// 有关HTTP请求的辅助类
/// </summary>
public class HttpRequestHelper
{
private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
/// <summary>
/// 创建GET方式的HTTP请求
/// </summary>
/// <param name="url">请求的URL</param>
/// <param name="timeout">请求的超时时间</param>
/// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>
/// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>
/// <returns></returns>
public static HttpWebResponse CreateGetHttpResponse(string url, int? timeout, string userAgent, CookieCollection cookies)
{
if (string.IsNullOrEmpty(url))
{
throw new ArgumentNullException("url");
}
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
request.UserAgent = DefaultUserAgent;
if (!string.IsNullOrEmpty(userAgent))
{
request.UserAgent = userAgent;
}
if (timeout.HasValue)
{
request.Timeout = timeout.Value;
}
if (cookies != null)
{
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
}
return request.GetResponse() as HttpWebResponse;
}

public   static string HttpGet(string url)
{
var result = CreateGetHttpResponse(url, 6000, null, null);
Stream stream = result.GetResponseStream(); //获取响应的字符串流
StreamReader sr = new StreamReader(stream); //创建一个stream读取流
string html = sr.ReadToEnd(); //从头读到尾,放到字符串html李米
return html;
}

public static string HttpPost(string url, IDictionary<string, string> par)
{
var result = CreatePostHttpResponse(url, par, new UTF8Encoding());
Stream stream = result.GetResponseStream(); //获取响应的字符串流
StreamReader sr = new StreamReader(stream); //创建一个stream读取流
string html = sr.ReadToEnd(); //从头读到尾,放到字符串html李米
return html;
}
/// <summary>
/// 创建POST方式的HTTP请求
/// </summary>
/// <param name="url">请求的URL</param>
/// <param name="parameters">随同请求POST的参数名称及参数值字典</param>
/// <param name="timeout">请求的超时时间</param>
/// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>
/// <param name="requestEncoding">发送HTTP请求时所用的编码</param>
/// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>
/// <returns></returns>
public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, Encoding requestEncoding ,int timeout = 2000, string userAgent = "", CookieCollection cookies = null)
{
if (string.IsNullOrEmpty(url))
{
throw new ArgumentNullException("url");
}
if (requestEncoding == null)
{
throw new ArgumentNullException("requestEncoding");
}
HttpWebRequest request = null;
//如果是发送HTTPS请求
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10;
}
else
{
request = WebRequest.Create(url) as HttpWebRequest;
}
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";

if (!string.IsNullOrEmpty(userAgent))
{
request.UserAgent = userAgent;
}
else
{
request.UserAgent = DefaultUserAgent;
}

if (cookies != null)
{
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
}
//如果需要POST数据
if (!(parameters == null || parameters.Count == 0))
{
StringBuilder buffer = new StringBuilder();
int i = 0;
foreach (string key in parameters.Keys)
{
if (i > 0)
{
buffer.AppendFormat("&{0}={1}", key, parameters[key]);
}
else
{
buffer.AppendFormat("{0}={1}", key, parameters[key]);
}
i++;
}
byte[] data = requestEncoding.GetBytes(buffer.ToString());
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
}
return request.GetResponse() as HttpWebResponse;
}

//public static string GetPtApi(string url, string parameters)
//{
//    if (string.IsNullOrEmpty(url))
//    {
//        throw new ArgumentNullException("url");
//    }
//    HttpWebRequest request = null;
//    //如果是发送HTTPS请求
//    if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
//    {
//        ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
//        request = WebRequest.Create(url) as HttpWebRequest;
//        request.ProtocolVersion = HttpVersion.Version10;
//    }
//    else
//    {
//        request = WebRequest.Create(url) as HttpWebRequest;
//    }
//    request.Method = "POST";
//    request.ContentType = "application/x-www-form-urlencoded";
//    request.UserAgent = DefaultUserAgent;
//    request.Headers.Add("plat","3");
//    //如果需要POST数据
//    if (!(parameters.IsStringEmpty()))
//    {
//        byte[] data =Encoding.UTF8.GetBytes(parameters);
//        using (Stream stream = request.GetRequestStream())
//        {
//            stream.Write(data, 0, data.Length);
//        }
//    }
//    Stream stream1 = request.GetResponse().GetResponseStream(); //获取响应的字符串流
//    StreamReader sr = new StreamReader(stream1); //创建一个stream读取流
//    string html = sr.ReadToEnd(); //从头读到尾,放到字符串html李米
//    return html;
//}
//public static string GetPtApi<T>(string url, T parameters)
//{
//    if (string.IsNullOrEmpty(url))
//    {
//        throw new ArgumentNullException("url");
//    }
//    HttpWebRequest request = null;
//    //如果是发送HTTPS请求
//    if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
//    {
//        ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
//        request = WebRequest.Create(url) as HttpWebRequest;
//        request.ProtocolVersion = HttpVersion.Version10;
//    }
//    else
//    {
//        request = WebRequest.Create(url) as HttpWebRequest;
//    }
//    request.Method = "POST";
//    request.ContentType = "application/x-www-form-urlencoded";
//    request.UserAgent = DefaultUserAgent;
//    request.Headers.Add("plat", "3");
//    //如果需要POST数据
//    if (parameters!=null)
//    {
//        var pro = typeof(T).GetProperties().OrderBy(c=>c.Name);
//        int i = 0;
//        StringBuilder data = new StringBuilder();
//        string key = "";
//        foreach (var m in pro)
//        {
//            if (m.Name.ToLower() == "key")
//            {
//                key = m.GetValue(parameters, null).ToString();
//                continue;
//            }
//            if (i > 0)
//            {
//                data.AppendFormat("&{0}={1}", m.Name, m.GetValue(parameters, null));
//            }
//            else
//            {
//                data.AppendFormat("{0}={1}", m.Name, m.GetValue(parameters, null));
//            }
//            i++;
//        }
//        data.AppendFormat("&key={0}",key);//KEY放最后
//       var sign= CP.Core.SecureHelper.GetMD5(data.ToString().ToUpper(), "UTF_8").ToUpper();
//        data.AppendFormat("&sign=" + sign);
//        byte[] data1 = Encoding.UTF8.GetBytes(data.ToString());
//        using (Stream stream = request.GetRequestStream())
//        {
//            stream.Write(data1, 0, data1.Length);
//        }
//    }
//    Stream stream1 = request.GetResponse().GetResponseStream(); //获取响应的字符串流
//    StreamReader sr = new StreamReader(stream1); //创建一个stream读取流
//    string html = sr.ReadToEnd(); //从头读到尾,放到字符串html李米
//    return html;
//}

private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return true; //总是接受
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: