using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using wms.dto.response;
using wms.util.Ext;
namespace wms.util.Http
{
public class HttpUtil
{
public static string ERPWebServerPath = string.Empty;
#region Get请求
///
/// Get请求
///
/// 接口地址
/// 超时时间
/// 编码方式
/// 内容格式
public static string GetRequest(string remoteUrl, int timeOut = 30000, string encode = "UTF-8", string contentType = "application/json")
{
var result = "";
try
{
var mRequest = (HttpWebRequest)WebRequest.Create(remoteUrl);
mRequest.Timeout = timeOut;
mRequest.ContentType = contentType;
var mResponse = (HttpWebResponse)mRequest.GetResponse();
Stream responseStream = mResponse.GetResponseStream();
if (responseStream == null)
{
return string.Empty;
}
using (System.IO.StreamReader reader = new System.IO.StreamReader(responseStream, Encoding.GetEncoding(encode)))
{
result = reader.ReadToEnd();
}
responseStream.Close();
}
catch (Exception ex)
{
throw ex;
}
return result;
}
#endregion Get请求
#region POST请求
///
/// 发起HTTP请求
///
/// 接口地址
/// 请求参数
/// 超时时间
/// 编码方式
/// 内容格式
public static string PostRequest(string remoteUrl, string postData, int timeOut = 30000, string encode = "UTF-8", string contentType = "application/json", string requestid = "", string sourcecode = "", string servicecode = "")
{
var result = string.Empty;
try
{
var mRequest = (HttpWebRequest)WebRequest.Create(remoteUrl);
//相应请求的参数
byte[] data = Encoding.GetEncoding(encode).GetBytes(postData);
mRequest.Method = "Post";
mRequest.ContentType = contentType;
mRequest.ContentLength = data.Length;
mRequest.Timeout = timeOut;
if (!string.IsNullOrEmpty(requestid))
{
mRequest.Headers["requestId"] = requestid;
mRequest.Headers["sourceCode"] = sourcecode;
mRequest.Headers["serviceCode"] = servicecode;
}
//请求流
Stream requestStream = mRequest.GetRequestStream();
requestStream.Write(data, 0, data.Length);
requestStream.Close();
//响应流
var mResponse = (HttpWebResponse)mRequest.GetResponse();
var responseStream = mResponse.GetResponseStream();
Encoding code = Encoding.GetEncoding(encode);
if (responseStream != null)
{
var readStream = new StreamReader(responseStream, code);
var read = new Char[256];
int count = readStream.Read(read, 0, 256);
while (count > 0)
{
var str = new String(read, 0, count);
result = result + str;
count = readStream.Read(read, 0, 256);
}
responseStream.Close();
}
if (!string.IsNullOrEmpty(requestid) && mResponse.Headers["esbCode "] != "000000" && string.IsNullOrEmpty(result))
{
return new SRes() { ResCode = 500, ResMsg = "esbDesc:" + mResponse.Headers["esbDesc"], Memo1 = "esbCode:" + mResponse.Headers["esbCode"] }.ToCamelCaseString();
}
}
catch (Exception ex)
{
throw ex;
}
return result;
}
private static readonly HttpClient _httpClient = new HttpClient();
///
/// 发起HTTP请求
///
/// 接口地址
/// 请求参数
/// 编码方式
/// 内容格式
/// 请求ID
/// 来源代码
/// 服务代码
public static async Task PostRequestAsync(string remoteUrl, string postData, string encode = "UTF-8", string contentType = "application/json", string requestid = "", string sourcecode = "", string servicecode = "")
{
try
{
var content = new StringContent(postData, Encoding.GetEncoding(encode), contentType);
// 设置请求头
if (!string.IsNullOrEmpty(requestid))
{
content.Headers.Add("requestId", requestid);
content.Headers.Add("sourceCode", sourcecode);
content.Headers.Add("serviceCode", servicecode);
}
// 发送异步POST请求
using (var response = await _httpClient.PostAsync(remoteUrl, content))
{
response.EnsureSuccessStatusCode();
// 读取响应内容
var result = await response.Content.ReadAsStringAsync();
if (!string.IsNullOrEmpty(requestid) && response.Headers.TryGetValues("esbCode", out var esbCodes) && !esbCodes.Contains("000000") && string.IsNullOrEmpty(result))
{
return new SRes() { ResCode = 500, ResMsg = "esbDesc:" + response.Headers.GetValues("esbDesc").FirstOrDefault(), Memo1 = "esbCode:" + esbCodes.FirstOrDefault() }.ToCamelCaseString();
}
return result;
}
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 不等待的异步HTTP请求
///
/// 接口地址
/// 请求参数
/// 编码方式
/// 内容格式
/// 请求ID
/// 来源代码
/// 服务代码
public static void FireAndForgetPostRequest(string remoteUrl, string postData, string encode = "UTF-8", string contentType = "application/json", string requestid = "", string sourcecode = "", string servicecode = "")
{
_ = PostRequestAsync(remoteUrl, postData, encode, contentType, requestid, sourcecode, servicecode);
}
///
/// 通过POST提交方式获取XML数据
///
/// 请求XML内容
/// 请求URL
///
public static XmlDocument PostRequestXml(string remoteUrl, string postData)
{
if (string.IsNullOrEmpty(postData) || string.IsNullOrEmpty(remoteUrl))
{
return null;
}
string result = PostRequest(remoteUrl, postData, 30000, "UTF-8", "application/x-www-form-urlencoded");
if (string.IsNullOrEmpty(result))
{
var xml = new XmlDocument();
xml.LoadXml(result);
return xml;
}
return null;
}
///
/// 发起HTTP请求
///
/// 接口地址
/// 请求参数
/// 超时时间
/// 编码方式
/// 内容格式
public static string PostRequestByWebApi(string remoteUrl, string postData, int timeOut = 30000, string encode = "UTF-8", string contentType = "application/json")//application/x-www-form-urlencoded application/json
{
var result = string.Empty;
try
{
if (string.IsNullOrEmpty(remoteUrl))
remoteUrl = ERPWebServerPath;
var mRequest = (HttpWebRequest)WebRequest.Create(remoteUrl);
//相应请求的参数
byte[] data = Encoding.GetEncoding(encode).GetBytes(postData);
mRequest.MaximumAutomaticRedirections = data.Length;
mRequest.MaximumResponseHeadersLength = data.Length;
mRequest.Method = "Post";
mRequest.ContentType = contentType;
mRequest.ContentLength = data.Length;
mRequest.Timeout = timeOut;
//请求流
Stream requestStream = mRequest.GetRequestStream();
requestStream.Write(data, 0, data.Length);
requestStream.Close();
//响应流
var mResponse = (HttpWebResponse)mRequest.GetResponse();
var responseStream = mResponse.GetResponseStream();
Encoding code = Encoding.GetEncoding(encode);
if (responseStream != null)
{
var readStream = new StreamReader(responseStream, code);
var read = new Char[256];
int count = readStream.Read(read, 0, 256);
while (count > 0)
{
var str = new String(read, 0, count);
result = result + str;
count = readStream.Read(read, 0, 256);
}
responseStream.Close();
}
}
catch (Exception ex)
{
throw ex;
}
return result;
}
#endregion POST请求
}
}