You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
485 lines
18 KiB
485 lines
18 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.Security;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace ICSSoft.Common
|
|
{
|
|
public class HTTPHelper
|
|
{
|
|
private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
|
|
|
public static string HttpPost(string apiName, string url, string body)
|
|
{
|
|
try
|
|
{
|
|
//log.Debug(url + Environment.NewLine + body);
|
|
Encoding encoding = Encoding.UTF8;
|
|
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
|
|
request.Method = "POST";
|
|
request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*";
|
|
request.ContentType = "application/json; charset=utf-8";
|
|
// request.ContentType = "text/html, application/xhtml+xml";
|
|
byte[] buffer = encoding.GetBytes(body);
|
|
request.ContentLength = buffer.Length;
|
|
request.GetRequestStream().Write(buffer, 0, buffer.Length);
|
|
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
|
|
using (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream(), encoding))
|
|
{
|
|
return reader.ReadToEnd();
|
|
}
|
|
}
|
|
catch (System.Net.WebException ex)
|
|
{
|
|
log.Error(ex.ToString() + Environment.NewLine + url + Environment.NewLine + body);
|
|
throw new Exception(apiName + "调用失败," + ex.Message);
|
|
}
|
|
}
|
|
|
|
public static string HttpPost(string url, string body)
|
|
{
|
|
try
|
|
{
|
|
Encoding encoding = Encoding.UTF8;
|
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
|
request.Method = "POST";
|
|
request.Accept = "text/html, application/xhtml+xml, */*";
|
|
request.ContentLength = 110;
|
|
request.ContentType = "application/json";
|
|
|
|
byte[] buffer = encoding.GetBytes(body);
|
|
request.ContentLength = buffer.Length;
|
|
request.GetRequestStream().Write(buffer, 0, buffer.Length);
|
|
log.Error(url + body);
|
|
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
|
|
using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
|
|
{
|
|
return reader.ReadToEnd();
|
|
}
|
|
}
|
|
catch (WebException ex)
|
|
{
|
|
var res = (HttpWebResponse)ex.Response;
|
|
StringBuilder sb = new StringBuilder();
|
|
StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
|
|
sb.Append(sr.ReadToEnd());
|
|
//string ssb = sb.ToString();
|
|
|
|
//throw new Exception(sb.ToString());
|
|
return "";
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 通过web api获取数据的方法
|
|
/// </summary>
|
|
/// <param name="url">api的url</param>
|
|
/// <param name="method">请求类型,默认是get</param>
|
|
/// <param name="postData">post请求所携带的数据</param>
|
|
/// <returns></returns>
|
|
public static string RequestData(string url, string method, string postData)
|
|
{
|
|
try
|
|
{
|
|
log.Error(postData);
|
|
method = method.ToUpper();
|
|
//设置安全通信协议 我方公司服务器有些强制使用tls1.2的安全通信协议,所以至少包含SecurityProtocolType.Tls12 如果沒有SecurityProtocolType.Tls12设置会报错:HttpWebRequest底层连接已关闭:传送时发生意外错误
|
|
ServicePointManager.SecurityProtocol =
|
|
SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls |
|
|
SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
|
|
|
|
//创建请求实例
|
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
|
|
|
//设置请求类型
|
|
request.Method = method;
|
|
//设置请求消息主体的编码方法
|
|
request.ContentType = "application/json";
|
|
|
|
//POST方式處理
|
|
if (method == "POST")
|
|
{
|
|
//用UTF8字符集对post请求携带的数据进行编码,可防止中文乱码
|
|
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
|
|
//指定客户端post请求携带的数据的长度
|
|
request.ContentLength = byteArray.Length;
|
|
|
|
//创建一个tream,用于写入post请求所携带的数据(该数据写入了请求体)
|
|
Stream stream = request.GetRequestStream();
|
|
stream.Write(byteArray, 0, byteArray.Length);
|
|
stream.Close();
|
|
}
|
|
|
|
//获取请求的响应实例
|
|
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
|
|
//获取读取流实体,用来以UTF8字符集读取响应流中的数据
|
|
StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
|
|
//进行数据读取
|
|
string retString = myStreamReader.ReadToEnd();
|
|
myStreamReader.Close();
|
|
return retString;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//拋出異常
|
|
throw ex;
|
|
}
|
|
}
|
|
|
|
public static string WorkDayPostData(string URL, string JsonData, string ContentType)
|
|
{
|
|
string str = string.Empty;
|
|
try
|
|
{
|
|
WebRequest request = WebRequest.Create(URL);
|
|
request.Method = "POST";
|
|
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(JsonData);
|
|
request.ContentType = ContentType;
|
|
request.ContentLength = bytes.Length;
|
|
using (Stream postStream = request.GetRequestStream())
|
|
{
|
|
postStream.Write(bytes, 0, bytes.Length);
|
|
}
|
|
request.Credentials = CredentialCache.DefaultCredentials;
|
|
WebResponse response = null;
|
|
try
|
|
{
|
|
response = request.GetResponse();
|
|
}
|
|
catch (WebException ex)
|
|
{
|
|
if (ex.Status == WebExceptionStatus.ProtocolError)
|
|
response = (WebResponse)ex.Response;
|
|
}
|
|
if (response != null)
|
|
{
|
|
using (StreamReader st = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8))
|
|
{
|
|
str = System.Web.HttpUtility.UrlDecode(st.ReadToEnd());
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
str = ex.Message;
|
|
}
|
|
return str;
|
|
|
|
}
|
|
|
|
public static void CreateObject(string URL, string DATA)
|
|
{
|
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
|
|
request.Method = "POST";
|
|
request.ContentType = "application/json";
|
|
request.ContentLength = DATA.Length;
|
|
StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII);
|
|
requestWriter.Write(DATA);
|
|
requestWriter.Close();
|
|
|
|
try
|
|
{
|
|
WebResponse webResponse = request.GetResponse();
|
|
Stream webStream = webResponse.GetResponseStream();
|
|
StreamReader responseReader = new StreamReader(webStream);
|
|
string response = responseReader.ReadToEnd();
|
|
Console.Out.WriteLine(response);
|
|
responseReader.Close();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.Out.WriteLine("-----------------");
|
|
Console.Out.WriteLine(e.Message);
|
|
}
|
|
|
|
}
|
|
|
|
public static string Post(string posturl, string jsonstr)
|
|
{
|
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(posturl);
|
|
|
|
request.Method = "POST";
|
|
request.ContentType = "application/x-www-form-urlencoded";
|
|
|
|
//json字符串转为字节数组
|
|
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(jsonstr);
|
|
|
|
//设置请求的ContentLength
|
|
request.ContentLength = bytes.Length;
|
|
|
|
//发送请求,获得请求流
|
|
Stream stream;
|
|
try
|
|
{
|
|
//获取用于写入请求数据的Stream对象
|
|
stream = request.GetRequestStream();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
stream = null;
|
|
Console.WriteLine(ex.Message);
|
|
}
|
|
//把数据写入流
|
|
stream.Write(bytes, 0, bytes.Length);
|
|
|
|
stream.Close();
|
|
|
|
HttpWebResponse response;
|
|
try
|
|
{
|
|
//获得响应流
|
|
response = (HttpWebResponse)request.GetResponse();
|
|
}
|
|
catch (WebException ex)
|
|
{
|
|
response = ex.Response as HttpWebResponse;
|
|
}
|
|
|
|
Stream s = response.GetResponseStream();
|
|
|
|
StreamReader sr = new StreamReader(s, Encoding.UTF8);
|
|
|
|
string strVal = sr.ReadToEnd().Trim();
|
|
sr.Close();
|
|
|
|
s.Close();
|
|
|
|
return strVal;
|
|
}
|
|
|
|
/// <summary>
|
|
/// HTTP访问method 常用的几样
|
|
/// </summary>
|
|
public enum HttpVerb
|
|
{
|
|
/// <summary>
|
|
/// get:获取
|
|
/// </summary>
|
|
GET,
|
|
/// <summary>
|
|
/// post:修改
|
|
/// </summary>
|
|
POST,
|
|
/// <summary>
|
|
/// put:写入
|
|
/// </summary>
|
|
PUT,
|
|
/// <summary>
|
|
/// delete:删除
|
|
/// </summary>
|
|
DELETE
|
|
}
|
|
/// <summary>
|
|
/// HTTP访问格式类型,根据Postman整理
|
|
/// </summary>
|
|
public enum HttpContentType
|
|
{
|
|
/// <summary>
|
|
/// text/plain
|
|
/// </summary>
|
|
Text,
|
|
/// <summary>
|
|
/// application/json
|
|
/// </summary>
|
|
JSON,
|
|
/// <summary>
|
|
/// application/xml
|
|
/// </summary>
|
|
XML,
|
|
/// <summary>
|
|
/// text/xml
|
|
/// </summary>
|
|
TextXML,
|
|
/// <summary>
|
|
/// text/html
|
|
/// </summary>
|
|
HTML,
|
|
/// <summary>
|
|
/// application/javascript
|
|
/// </summary>
|
|
Javascript
|
|
}
|
|
/// <summary>
|
|
/// Rest方式访问方法,ContentType为application/json
|
|
/// </summary>
|
|
public class RestHelper
|
|
{
|
|
/// <summary>
|
|
/// 请求的url地址
|
|
/// </summary>
|
|
public string EndPoint { get; set; }
|
|
/// <summary>
|
|
/// 请求的方法,默认 GET
|
|
/// </summary>
|
|
public HttpVerb Method { get; set; }
|
|
/// <summary>
|
|
/// 格式类型:默认application/json
|
|
/// </summary>
|
|
public HttpContentType ContentType { get; set; }
|
|
/// <summary>
|
|
/// 传送的数据,如json字符串
|
|
/// </summary>
|
|
public string PostData { get; set; }
|
|
/// <summary>
|
|
/// 编码规范,默认 UTF8
|
|
/// </summary>
|
|
public Encoding HttpEncoding { get; set; }
|
|
/// <summary>
|
|
/// 构造函数
|
|
/// </summary>
|
|
public RestHelper(HttpContentType contentType = HttpContentType.JSON)
|
|
{
|
|
EndPoint = "";
|
|
Method = HttpVerb.GET;
|
|
ContentType = contentType;
|
|
PostData = "";
|
|
HttpEncoding = Encoding.UTF8;
|
|
}
|
|
/// <summary>
|
|
/// 构造函数
|
|
/// </summary>
|
|
public RestHelper(string endpoint, HttpContentType contentType = HttpContentType.JSON)
|
|
{
|
|
EndPoint = endpoint;
|
|
Method = HttpVerb.GET;
|
|
ContentType = contentType;
|
|
PostData = "";
|
|
HttpEncoding = Encoding.UTF8;
|
|
}
|
|
/// <summary>
|
|
/// 构造函数
|
|
/// </summary>
|
|
public RestHelper(string endpoint, HttpVerb method, HttpContentType contentType = HttpContentType.JSON)
|
|
{
|
|
EndPoint = endpoint;
|
|
Method = method;
|
|
ContentType = contentType;
|
|
PostData = "";
|
|
HttpEncoding = Encoding.UTF8;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 构造函数
|
|
/// </summary>
|
|
public RestHelper(string endpoint, HttpVerb method, string postData, HttpContentType contentType = HttpContentType.JSON)
|
|
{
|
|
EndPoint = endpoint;
|
|
Method = method;
|
|
ContentType = contentType;
|
|
PostData = postData;
|
|
HttpEncoding = Encoding.UTF8;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 构造函数
|
|
/// </summary>
|
|
public RestHelper(string endpoint, Encoding encoding, HttpVerb method = HttpVerb.GET, string postData = "", HttpContentType contentType = HttpContentType.JSON)
|
|
{
|
|
EndPoint = endpoint;
|
|
Method = method;
|
|
ContentType = contentType;
|
|
PostData = postData;
|
|
HttpEncoding = encoding;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 直接访问
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string MakeRequest()
|
|
{
|
|
return MakeRequest("");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 带参数访问,如 MakeRequest("?param=0")
|
|
/// </summary>
|
|
/// <param name="parameters"></param>
|
|
/// <returns></returns>
|
|
public string MakeRequest(string parameters)
|
|
{
|
|
try
|
|
{
|
|
var request = (HttpWebRequest)WebRequest.Create(EndPoint + parameters);
|
|
|
|
request.Method = Method.ToString();
|
|
request.ContentLength = 0;
|
|
request.ContentType = GetContentType(ContentType);
|
|
|
|
//如果传送的数据不为空,并且方法是post或put
|
|
if (!string.IsNullOrEmpty(PostData) && (Method == HttpVerb.POST || Method == HttpVerb.PUT))
|
|
{
|
|
var bytes = HttpEncoding.GetBytes(PostData);//编码方式,默认UTF-8
|
|
request.ContentLength = bytes.Length;
|
|
|
|
using (var writeStream = request.GetRequestStream())
|
|
{
|
|
writeStream.Write(bytes, 0, bytes.Length);
|
|
}
|
|
}
|
|
using (var response = (HttpWebResponse)request.GetResponse())
|
|
{
|
|
var responseValue = string.Empty;
|
|
|
|
if (response.StatusCode != HttpStatusCode.OK)
|
|
{
|
|
var message = String.Format("Request failed. Received HTTP {0}", response.StatusCode);
|
|
throw new ApplicationException(message);
|
|
}
|
|
|
|
// grab the response
|
|
using (var responseStream = response.GetResponseStream())
|
|
{
|
|
if (responseStream != null)
|
|
{
|
|
using (var reader = new StreamReader(responseStream))
|
|
{
|
|
responseValue = reader.ReadToEnd();
|
|
}
|
|
}
|
|
}
|
|
return responseValue;
|
|
}
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
throw new Exception(e.Message);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 将content type转成字符串描述
|
|
/// </summary>
|
|
/// <param name="contentType"></param>
|
|
/// <returns></returns>
|
|
private string GetContentType(HttpContentType contentType)
|
|
{
|
|
switch (contentType)
|
|
{
|
|
case HttpContentType.Text:
|
|
return "text/plain";
|
|
case HttpContentType.JSON:
|
|
return "application/json";
|
|
case HttpContentType.XML:
|
|
return "application/xml";
|
|
case HttpContentType.TextXML:
|
|
return "text/xml";
|
|
case HttpContentType.HTML:
|
|
return "text/html";
|
|
case HttpContentType.Javascript:
|
|
return "application/javascript";
|
|
default:
|
|
return "";
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
}
|