using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
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 ToolLibrary
{
public class HttpHelper
{
///
/// http请求,POST方式
///
/// 请求连接
/// 请求参数
/// 根据泛型返回响应值
public static T HttpPostRequest(string url, object dicParams, string accessToken = null)
{
Stream requestStream = null;
try
{
Encoding encoding = Encoding.UTF8;
HttpWebRequest request = GetHttpWebRequest(url);
request.Method = "POST";
request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*";
request.ContentType = "application/json;charset=UTF-8";
//request.Headers.Add("ContentType", "application/json; charset=utf-8");
if (!string.IsNullOrEmpty(accessToken))
request.Headers.Add("Authorization", "Bearer" + " " + accessToken);
if (dicParams != null)
{
var paramStr = ObjectToJsonStr(dicParams);
byte[] buffer = encoding.GetBytes(paramStr);
request.ContentLength = buffer.Length;
requestStream = request.GetRequestStream();
requestStream.Write(buffer, 0, buffer.Length);
}
return GetResponseValue(request);
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (requestStream != null)
requestStream.Close();
}
}
///
/// http请求,POST方式,文件断点续传
///
/// 请求连接
/// 请求参数
/// 根据泛型返回响应值
public static T HttpPostRequest(string url, byte[] buffer, string contentRange = null, string accessToken = null)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);//webrequest请求api地址
request.Method = "POST";
//request.Accept = "text/html, application/xhtml+xml, */*"; //"text/html, application/xhtml+xml, */*";
request.ContentType = "multipart/form-data";
if (!string.IsNullOrWhiteSpace(contentRange))
request.Headers.Add("Content-Range", contentRange);
if (!string.IsNullOrEmpty(accessToken))
request.Headers.Add("Authorization", "Bearer" + " " + accessToken);
if (buffer != null)
{
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
}
return GetResponseValue(request);
}
catch (Exception ex)
{
throw ex;
}
}
public static T HttpPostFileRequest(string url, string boundary, MemoryStream memoryStream, string accessToken = null)
{
if (memoryStream == null) return default(T);
Stream requestStream = null;
try
{
HttpWebRequest request = GetHttpWebRequest(url);
request.Method = "POST";
request.ContentType = "multipart/form-data;boundary=" + boundary;
if (!string.IsNullOrEmpty(accessToken))
request.Headers.Add("Authorization", "Bearer" + " " + accessToken);
request.ContentLength = memoryStream.Length;
request.KeepAlive = true;
request.Credentials = CredentialCache.DefaultCredentials;
memoryStream.Position = 0;
byte[] buffer = new byte[memoryStream.Length];
memoryStream.Read(buffer, 0, buffer.Length);
requestStream = request.GetRequestStream();
requestStream.Write(buffer, 0, buffer.Length);
return GetResponseValue(request);
}
catch (Exception ex)
{
throw ex;
}
finally
{
memoryStream.Close();
if (requestStream != null)
requestStream.Close();
}
}
///
/// http请求,POST方式,不需要返回值
///
/// 请求连接
/// 请求参数
public static void HttpPostRequest(string url, object dicParams)
{
try
{
Encoding encoding = Encoding.UTF8;
HttpWebRequest request = GetHttpWebRequest(url);
request.Method = "POST";
request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*";
request.ContentType = "application/json";
if (dicParams != null)
{
byte[] buffer = encoding.GetBytes(ObjectToJsonStr(dicParams));
request.ContentLength = buffer.Length;
var requestStream = request.GetRequestStream();
requestStream.Write(buffer, 0, buffer.Length);
requestStream.Close();
}
request.GetResponse();
}
catch (Exception ex)
{
throw ex;
}
}
///
/// http请求,GET方式
///
/// 请求连接
/// 请求参数
/// 根据泛型返回响应值
public static T HttpGetRequest(string url, Dictionary dicParams = null, string accessToken = null)
{
try
{
StringBuilder sBuilder = new StringBuilder();
sBuilder.Append(url);
if (dicParams != null && dicParams.Count > 0)
{
sBuilder.Append("?");
int i = 0;
foreach (KeyValuePair pair in dicParams)
{
if (i > 0)
sBuilder.Append("&");
sBuilder.AppendFormat("{0}={1}", pair.Key, pair.Value);
i++;
}
}
HttpWebRequest request = GetHttpWebRequest(url);
request.Method = "GET";
request.Accept = "application/json, text/javascript, */*";
if (!string.IsNullOrEmpty(accessToken))
request.Headers.Add("Authorization", "Bearer" + " " + accessToken);
return GetResponseValue(request);
}
catch (Exception ex)
{
throw ex;
}
}
///
/// http请求,GET方式,不需要返回值
///
/// 请求连接
/// 请求参数
/// 根据泛型返回响应值
public static void HttpGetRequest(string url, Dictionary dicParams = null)
{
try
{
StringBuilder sBuilder = new StringBuilder();
sBuilder.Append(url);
if (dicParams != null && dicParams.Count > 0)
{
sBuilder.Append("?");
int i = 0;
foreach (KeyValuePair pair in dicParams)
{
if (i > 0)
sBuilder.Append("&");
sBuilder.AppendFormat("{0}={1}", pair.Key, pair.Value);
i++;
}
}
HttpWebRequest request = GetHttpWebRequest(url);
request.Method = "GET";
request.GetResponse();
}
catch (Exception ex)
{
throw ex;
}
}
private static T GetResponseValue(HttpWebRequest request)
{
HttpWebResponse response = null;
try
{
T rstObj = default(T);
response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
string rstStr = reader.ReadToEnd();
rstObj = JsonConvert.DeserializeObject(rstStr);
reader.Close();
reader.Dispose();
}
return rstObj;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (response != null)
response.Close();
}
}
private static HttpWebRequest GetHttpWebRequest(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);//webrequest请求api地址
if (url.ToLower().Trim().StartsWith("https"))
{
request.ProtocolVersion = HttpVersion.Version10;
//在每个HttpWebRequest实例上设置ServerCertificateValidationCallback属性
request.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
//ServicePointManager.ServerCertificateValidationCallback += (s, cert, chain, sslPolicyErrors) => true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
}
//request.Timeout = 10000;
return request;
}
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return true; //总是接受
}
private static string ObjectToJsonStr(object obj)
{
if (obj == null) return "";
var serializerSettings = new JsonSerializerSettings
{
// 设置为驼峰命名
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
return JsonConvert.SerializeObject(obj, Formatting.None, serializerSettings);
}
}
}