TG.WXCRM.V4/TEST1/RequestHelper.cs

230 lines
8.7 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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; //总是接受
}
}
}