230 lines
8.7 KiB
C#
230 lines
8.7 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using System.Net;
|
||
using System.Net.Security;
|
||
using System.Security.Cryptography.X509Certificates;
|
||
using System.Text;
|
||
|
||
namespace AppletMvcService.Common
|
||
{
|
||
public class RequestHelper
|
||
{
|
||
private static readonly string DefaultUserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0";
|
||
|
||
/// <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))
|
||
{
|
||
return null;
|
||
}
|
||
HttpWebRequest request = null;
|
||
HttpWebResponse response = null;
|
||
try
|
||
{
|
||
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);//验证服务器证书回调自动验证
|
||
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);
|
||
}
|
||
response = request.GetResponse() as HttpWebResponse;
|
||
return response;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
if (response != null)
|
||
{
|
||
response.Close();
|
||
}
|
||
throw (ex);
|
||
}
|
||
}
|
||
|
||
public static string CreateGetString(string url, int? timeout, string userAgent, CookieCollection cookies)
|
||
{
|
||
HttpWebResponse response = null;
|
||
Stream stream = null;
|
||
StreamReader sr = null;
|
||
try
|
||
{
|
||
response = CreateGetHttpResponse(url, timeout, userAgent, cookies);
|
||
if (response == null)
|
||
{
|
||
return string.Empty;
|
||
}
|
||
stream = response.GetResponseStream();
|
||
sr = new StreamReader(stream);
|
||
string strResult = sr.ReadToEnd();
|
||
sr.Close();
|
||
stream.Close();
|
||
response.Close();
|
||
return strResult;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
throw (ex);
|
||
}
|
||
finally
|
||
{
|
||
if (sr != null) { sr.Close(); }
|
||
if (stream != null) { stream.Close(); }
|
||
if (response != null) { response.Close(); }
|
||
}
|
||
}
|
||
|
||
/// <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, object postData, int? timeout, string userAgent, Encoding requestEncoding, CookieCollection cookies)
|
||
{
|
||
if (string.IsNullOrEmpty(url))
|
||
{
|
||
return null;
|
||
}
|
||
if (requestEncoding == null)
|
||
{
|
||
requestEncoding = System.Text.Encoding.UTF8;
|
||
}
|
||
HttpWebRequest request = null;
|
||
HttpWebResponse response = null;
|
||
try
|
||
{
|
||
//如果是发送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 (timeout.HasValue)
|
||
{
|
||
request.Timeout = timeout.Value;
|
||
}
|
||
if (cookies != null)
|
||
{
|
||
request.CookieContainer = new CookieContainer();
|
||
request.CookieContainer.Add(cookies);
|
||
}
|
||
string strBuffer = string.Empty;
|
||
if (postData is string)
|
||
{
|
||
strBuffer = (string)postData;
|
||
}
|
||
else if (postData is IDictionary<string, string>)
|
||
{
|
||
IDictionary<string, string> parameters = (IDictionary<string, string>)postData;
|
||
//如果需要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++;
|
||
}
|
||
strBuffer = buffer.ToString();
|
||
}
|
||
}
|
||
byte[] data = requestEncoding.GetBytes(strBuffer.ToString());
|
||
using (Stream stream = request.GetRequestStream())
|
||
{
|
||
stream.Write(data, 0, data.Length);
|
||
}
|
||
response = request.GetResponse() as HttpWebResponse;
|
||
return response;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
if (response != null)
|
||
{
|
||
response.Close();
|
||
}
|
||
throw (ex);
|
||
}
|
||
}
|
||
|
||
public static string CreatePostGetString(string url, object postData, int? timeout, string userAgent, Encoding requestEncoding, CookieCollection cookies)
|
||
{
|
||
HttpWebResponse response = null;
|
||
Stream stream = null;
|
||
StreamReader sr = null;
|
||
try
|
||
{
|
||
response = CreatePostHttpResponse(url, postData, timeout, userAgent, requestEncoding, cookies);
|
||
if (response == null)
|
||
{
|
||
return string.Empty;
|
||
}
|
||
stream = response.GetResponseStream();
|
||
sr = new StreamReader(stream);
|
||
string strResult = sr.ReadToEnd();
|
||
return strResult;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
throw (ex);
|
||
}
|
||
finally
|
||
{
|
||
if (sr != null) { sr.Close(); }
|
||
if (stream != null) { stream.Close(); }
|
||
if (response != null) { response.Close(); }
|
||
}
|
||
}
|
||
|
||
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
|
||
{
|
||
return true; //总是接受
|
||
}
|
||
}
|
||
}
|