using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
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
#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;
}
///
/// 通过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
}
}