using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Web;
namespace UnitTes
{
public class HttpHandler
{
/// <summary>
/// HTTP 带请求头的 Post Json
/// </summary>
/// <param name="url"></param>
/// <param name="jsonStr"></param>
/// <param name="headers"></param>
/// <param name="timeout"></param>
/// <param name="requestEncoding"></param>
/// <returns></returns>
public static System.Net.HttpWebResponse CreatePostJsonHeaderResponse(string url, string jsonStr, IDictionary<string, string> headers=null, int timeout=10000, Encoding requestEncoding=null)
{
requestEncoding = requestEncoding == null ? Encoding.UTF8 : requestEncoding;
if (null == headers || headers.Count == 0)
{
return CreatePostJsonResponse(url, jsonStr, timeout, requestEncoding);
}
HttpWebRequest request = null;
HttpWebResponse SendSMSResponse = null;
Stream dataStream = null;
CookieContainer cookieContainer = new CookieContainer();
try
{
request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.KeepAlive = false;
request.ServicePoint.ConnectionLimit = 300;
request.AllowAutoRedirect = true;
request.Timeout = timeout;
request.ReadWriteTimeout = 10000;
request.ContentType = "application/json";
//request.Accept = "application/xml";
request.Headers.Add("X-Auth-Token", HttpUtility.UrlEncode("openstack"));
string strContent = jsonStr;
byte[] bytes = requestEncoding.GetBytes(strContent);
request.Proxy = null;
request.CookieContainer = cookieContainer;
foreach (var pair in headers)
{
request.Headers[pair.Key] = pair.Value;
}
using (dataStream = request.GetRequestStream())
{
dataStream.Write(bytes, 0, bytes.Length);
}
SendSMSResponse = (HttpWebResponse)request.GetResponse();
return SendSMSResponse;
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// HTTP Basic 验证 Post Json
/// </summary>
/// <param name="url"></param>
/// <param name="username"></param>
/// <param name="userpw"></param>
/// <param name="jsonStr"></param>
/// <param name="timeout"></param>
/// <param name="requestEncoding"></param>
/// <returns></returns>
public static HttpWebResponse CreatePostJsonBasicResponse(string username, string userpw, string url, string jsonStr, int timeout = 10000, Encoding requestEncoding = null)
{
requestEncoding = requestEncoding == null ? Encoding.UTF8 : requestEncoding;
HttpWebRequest request = null;
HttpWebResponse SendSMSResponse = null;
Stream dataStream = null;
CookieContainer cookieContainer = new CookieContainer();
try
{
request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.KeepAlive = false;
request.ServicePoint.ConnectionLimit = 300;
request.AllowAutoRedirect = true;
request.Timeout = timeout;
request.ReadWriteTimeout = 10000;
request.ContentType = "application/json";
string strContent = jsonStr;
byte[] bytes = requestEncoding.GetBytes(strContent);
request.Proxy = null;
request.CookieContainer = cookieContainer;
NetworkCredential netCredential = new NetworkCredential(username, userpw);
Uri uri = new Uri(url);
ICredentials credentials = netCredential.GetCredential(uri, "Basic");
if (netCredential != null)
{
byte[] credentialBuffer = requestEncoding.GetBytes(
netCredential.UserName + ":" +
netCredential.Password);
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(credentialBuffer);
}
else
{
throw new ApplicationException("No network credentials");
}
using (dataStream = request.GetRequestStream())
{
dataStream.Write(bytes, 0, bytes.Length);
}
SendSMSResponse = (HttpWebResponse)request.GetResponse();
return SendSMSResponse;
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// HTTP post json/body
/// </summary>
/// <param name="url"></param>
/// <param name="jsonStr"></param>
/// <param name="timeout"></param>
/// <param name="requestEncoding"></param>
/// <returns></returns>
public static HttpWebResponse CreatePostJsonResponse(string url, string jsonStr, int timeout = 10000, Encoding requestEncoding = null)
{
requestEncoding = requestEncoding == null ? Encoding.UTF8 : requestEncoding;
HttpWebRequest request = null;
try
{
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
//对服务端证书进行有效性校验(非第三方权威机构颁发的证书,如自己生成的,不进行验证,这里返回true)
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10; //http版本,默认是1.1,这里设置为1.0
}
else
{
request = WebRequest.Create(url) as HttpWebRequest;
}
request.Method = "POST";
request.KeepAlive = false;
request.ServicePoint.ConnectionLimit = 300;
request.AllowAutoRedirect = true;
request.Timeout = timeout;
request.ReadWriteTimeout = 10000;
request.ContentType = "application/json";
//request.Accept = "application/xml";
request.Headers.Add("X-Auth-Token", HttpUtility.UrlEncode("openstack"));
string strContent = jsonStr;
byte[] bytes = requestEncoding.GetBytes(strContent);
request.Proxy = null;
using (var dataStream = request.GetRequestStream())
{
dataStream.Write(bytes, 0, bytes.Length);
}
var SendSMSResponse = (HttpWebResponse)request.GetResponse();
return SendSMSResponse;
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// HTTP post from
/// </summary>
/// <param name="url"></param>
/// <param name="parameters"></param>
/// <param name="timeout"></param>
/// <param name="requestEncoding"></param>
/// <returns></returns>
public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, int timeout = 10000, Encoding requestEncoding = null)
{
requestEncoding = requestEncoding == null ? Encoding.UTF8 : requestEncoding;
HttpWebRequest request = null;
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
//对服务端证书进行有效性校验(非第三方权威机构颁发的证书,如自己生成的,不进行验证,这里返回true)
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10; //http版本,默认是1.1,这里设置为1.0
}
else
{
request = WebRequest.Create(url) as HttpWebRequest;
}
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.Timeout = timeout;
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);
}
}
else
{
request.ContentLength = 0;
}
return request.GetResponse() as HttpWebResponse;
}
/// <summary>
/// HTTP 带请求头的 Get from
/// </summary>
/// <param name="url"></param>
/// <param name="parameters"></param>
/// <param name="headers"></param>
/// <param name="timeout"></param>
/// <param name="requestEncoding"></param>
/// <returns></returns>
public static HttpWebResponse CreateGetHttpHeaderResponse(string url, IDictionary<string, string> parameters, IDictionary<string, string> headers , int timeout = 10000, Encoding requestEncoding = null)
{
requestEncoding = requestEncoding == null ? Encoding.UTF8 : requestEncoding;
if (null == headers || headers.Count == 0)
{
return CreateGetHttpResponse(url, parameters, timeout, requestEncoding);
}
StringBuilder buffer = new StringBuilder();
if (!(parameters == null || parameters.Count == 0))
{
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++;
}
}
string requestUrl = url + buffer.ToString();
HttpWebRequest request = null;
if (requestUrl.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
//对服务端证书进行有效性校验(非第三方权威机构颁发的证书,如自己生成的,不进行验证,这里返回true)
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(requestUrl) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10; //http版本,默认是1.1,这里设置为1.0
}
else
{
request = WebRequest.Create(requestUrl) as HttpWebRequest;
}
request.Method = "GET";
foreach (var pair in headers)
{
request.Headers[pair.Key] = pair.Value;
}
return request.GetResponse() as HttpWebResponse;
}
/// <summary>
///HTTP GET from
/// </summary>
/// <param name="url"></param>
/// <param name="parameters"></param>
/// <param name="timeout"></param>
/// <param name="requestEncoding"></param>
/// <returns></returns>
public static HttpWebResponse CreateGetHttpResponse(string url, IDictionary<string, string> parameters, int timeout = 10000, Encoding requestEncoding = null)
{
requestEncoding = requestEncoding == null ? Encoding.UTF8 : requestEncoding;
StringBuilder buffer = new StringBuilder();
if (!(parameters == null || parameters.Count == 0))
{
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++;
}
}
string requestUrl = url + buffer.ToString();
HttpWebRequest request = null;
if (requestUrl.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
//对服务端证书进行有效性校验(非第三方权威机构颁发的证书,如自己生成的,不进行验证,这里返回true)
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(requestUrl) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10; //http版本,默认是1.1,这里设置为1.0
}
else
{
request = WebRequest.Create(requestUrl) as HttpWebRequest;
}
request.Method = "GET";
return request.GetResponse() as HttpWebResponse;
}
/// <summary>
/// HTTP Basic 验证 Get form
/// </summary>
/// <param name="url"></param>
/// <param name="parameters"></param>
/// <param name="networkCredentials"></param>
/// <param name="timeout"></param>
/// <param name="requestEncoding"></param>
/// <returns></returns>
public static HttpWebResponse CreateGetHttpBasicResponse(string url, IDictionary<string, string> parameters, NetworkCredential networkCredentials, int timeout = 10000, Encoding requestEncoding = null)
{
requestEncoding = requestEncoding == null ? Encoding.UTF8 : requestEncoding;
StringBuilder buffer = new StringBuilder();
if (!(parameters == null || parameters.Count == 0))
{
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++;
}
}
string requestUrl = url + buffer.ToString();
HttpWebRequest request = null;
if (requestUrl.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
//对服务端证书进行有效性校验(非第三方权威机构颁发的证书,如自己生成的,不进行验证,这里返回true)
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(requestUrl) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10; //http版本,默认是1.1,这里设置为1.0
}
else
{
request = WebRequest.Create(requestUrl) as HttpWebRequest;
}
if (networkCredentials != null)
{
byte[] credentialBuffer = new UTF8Encoding().GetBytes(
networkCredentials.UserName + ":" +
networkCredentials.Password);
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(credentialBuffer);
}
else
{
throw new ApplicationException("No network credentials");
}
request.Method = "GET";
return request.GetResponse() as HttpWebResponse;
}
/// <summary>
/// 获取请求的数据
/// </summary>
public static string GetResponseString(HttpWebResponse webresponse)
{
using (Stream s = webresponse.GetResponseStream())
{
StreamReader reader = new StreamReader(s, Encoding.UTF8);
return reader.ReadToEnd();
}
}
/// <summary>
/// 验证证书
/// </summary>
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
/*if (errors == SslPolicyErrors.None)
return true;
return false;*/
return true;
}
}
}