/// <summary>
/// 创建POST方式的HTTP请求
/// </summary>
/// <param name="url">请求的URL</param>
/// <param name="parameters">随同请求POST的参数名称及参数值字典</param>
/// <param name="timeout">请求的超时时间</param>
/// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>
/// <param name="requestEncoding">发送HTTP请求时所用的编码</param>
/// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>
/// <returns></returns>
public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, int? timeout, string userAgent, Encoding requestEncoding, CookieCollection cookies)
{
if (string.IsNullOrEmpty(url))
{
throw new ArgumentNullException("url");
}
if (requestEncoding == null)
{
throw new ArgumentNullException("requestEncoding");
}
HttpWebRequest request = null;
//如果是发送HTTPS请求
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10;
}
else
{
request = WebRequest.Create(url) as HttpWebRequest;
}
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
if (!string.IsNullOrEmpty(userAgent))
{
request.UserAgent = userAgent;
}
else
{
request.UserAgent = DefaultUserAgent;
}
if (timeout.HasValue)
{
request.Timeout = timeout.Value;
}
if (cookies != null)
{
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
}
//如果需要POST数据
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);
}
}
return request.GetResponse() as HttpWebResponse;
}
/// <param name="url">请求链接</param>
/// <param name="timeout">超时时间</param>
/// <param name="postdata">Post提交数据</param>
/// <param name="getdata">Get提交数据</param>
/// <param name="method">请求方式</param>
/// <param name="encoding">编码方式</param>
/// <param name="contentType">编码格式</param>
/// <returns></returns>
public static string DoHttp(string url, int timeout, string getdata, string postdata, int method, Encoding encoding, string contentType, Dictionary<string, string> dic)
{
HttpWebRequest httprequest = null;
var strresult = string.Empty;
lock (obj)
{
try
{
if (string.IsNullOrEmpty(url) && method > 0)
{
throw new Exception("请求参数没有全部提供");
}
switch ((HTTPType)method)
{
case HTTPType.GetType:
{
httprequest = WebRequest.Create(url + "?" + getdata) as HttpWebRequest;
if (httprequest != null)
{
httprequest.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
httprequest.Method = "GET";
}
}
break;
case HTTPType.PostType:
{
httprequest = WebRequest.Create(url) as HttpWebRequest;
var bdata = encoding.GetBytes(postdata);
if (httprequest != null)
{
httprequest.ServicePoint.Expect100Continue = false;
httprequest.ServicePoint.UseNagleAlgorithm = false;
httprequest.Headers.Clear(); //清除http请求头信息
if (dic != null && dic.Count > 0)
{
foreach (var item in dic)
{
httprequest.Headers.Add(item.Key, item.Value);
}
}
httprequest.Timeout = timeout; //超时时间
httprequest.Method = "POST";
httprequest.ContentType = string.IsNullOrEmpty(contentType)
? "application/x-www-form-urlencoded;charset=utf-8"
: contentType;
httprequest.ContentLength = bdata.Length;
var streamOut = httprequest.GetRequestStream();
streamOut.Write(bdata, 0, bdata.Length);
streamOut.Close();
}
}
break;
case HTTPType.PostAndGet:
{
httprequest = WebRequest.Create(url + "?" + getdata) as HttpWebRequest;
var bdata = encoding.GetBytes(postdata);
if (httprequest != null)
{
httprequest.ServicePoint.Expect100Continue = false;
httprequest.ServicePoint.UseNagleAlgorithm = false;
httprequest.Headers.Clear(); //清除http请求头信息
if (timeout > 0)
httprequest.Timeout = timeout; //超时时间
httprequest.Method = "POST";
//httprequest.ContentType = "text/xml";
httprequest.ContentType = string.IsNullOrEmpty(contentType)
? "application/x-www-form-urlencoded;charset=utf-8"
: contentType;
httprequest.ContentLength = bdata.Length;
var streamOut = httprequest.GetRequestStream();
streamOut.Write(bdata, 0, bdata.Length);
streamOut.Close();
}
} break;
}
if (httprequest != null)
{
//var myResponse = httprequest.GetResponse() as HttpWebResponse;
HttpWebResponse myResponse;
try
{
myResponse = (HttpWebResponse)httprequest.GetResponse();
}
catch (WebException ex)
{
myResponse = (HttpWebResponse)ex.Response;
}
if (myResponse != null)
{
using (var reader = new StreamReader(myResponse.GetResponseStream(), encoding))
{
strresult = reader.ReadToEnd();
}
}
}
}
catch (Exception ex)
{
strresult = "请求连接:" + url + " 参数:" + postdata + "失败!" + "异常信息:" + ex.ToString(); //代表失败
}
}
return strresult;
}
public class GetOrderAlterService : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
StreamReader inputContent = new StreamReader(context.Request.InputStream, System.Text.Encoding.UTF8);
string requestContent = inputContent.ReadToEnd();
---json序列化
object requestModel = JsonHelper.JsonToObject<QueryGroupOrderStateRequestEntity>(requestContent);
}
}
public class CtripGetOrderCount : IHttpHandler
{
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
string jobnum = ConvertHelper.ToString(context.Request["triggername"]);
log4net.LogManager.GetLogger("RuningLogger").Debug("携程预付监控获取订单数量");
Stopwatch stop = new Stopwatch();
stop.Start();
bool result = false;
switch (jobnum)
{
case "CtripGetOrderCount":
result = CtripConsoleService.GetOrderCount();
break;
}
stop.Stop();
log4net.LogManager.GetLogger("RuningLogger").Debug("携程预付监控获取订单数量job结束,运行时间:" + stop.ElapsedMilliseconds);
context.Response.Write(result.ToString() + ",运行时间:" + stop.ElapsedMilliseconds);
}