using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace Tiobon.Core.OPS.Tool.OPS.Tool.Helper
{
///
///
///
public class HttpHelper
{
#region HTTP模板
private static CookieContainer m_Cookies = new CookieContainer();
public enum Compression
{
GZip,
Deflate,
None,
}
///
/// 获取HttpWebRequest模板
///
/// URL地址
/// POST
/// Cookies
///
private static HttpWebRequest GetHttpRequest(string url, string postdata, CookieContainer cookies)
{
HttpWebRequest request = HttpWebRequest.Create(new Uri(url)) as HttpWebRequest;
request.ContentType = "application/json";
request.ServicePoint.ConnectionLimit = 300;
ServicePointManager.Expect100Continue = false;
request.Referer = url;
request.Accept = "*/*";
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)";
request.AllowAutoRedirect = true;
if (postdata != null && postdata != "")
{
request.Method = "POST";
byte[] byte_post = Encoding.Default.GetBytes(postdata);
request.ContentLength = byte_post.Length;
using (Stream stream = request.GetRequestStream())
{
stream.Write(byte_post, 0, byte_post.Length);
}
}
else
{
request.Method = "GET";
}
return request;
}
///
/// 提取HttpWebResponse文本内容
///
/// HttpWebResponse响应包
///
private static string GetResponseContent(HttpWebResponse resp)
{
if (resp.StatusCode != HttpStatusCode.OK)
throw new Exception("远程服务器返回状态码: " + resp.StatusCode);
Encoding enc = Encoding.UTF8;
if (resp.CharacterSet != null && resp.CharacterSet != "")
enc = Encoding.GetEncoding(resp.CharacterSet);
Compression comp = Compression.None;
if (resp.ContentEncoding != null && resp.ContentEncoding.Trim().ToUpper() == "GZIP")
comp = Compression.GZip;
else if (resp.ContentEncoding != null && resp.ContentEncoding.Trim().ToUpper() == "DEFLATE")
comp = Compression.Deflate;
MemoryStream ms = new MemoryStream();
using (StreamWriter sw = new StreamWriter(ms, enc))
{
StreamReader sr;
switch (comp)
{
case Compression.GZip:
sr = new StreamReader(new System.IO.Compression.GZipStream(resp.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress), enc);
break;
case Compression.Deflate:
sr = new StreamReader(new System.IO.Compression.DeflateStream(resp.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress), enc);
break;
default:
sr = new StreamReader(resp.GetResponseStream(), enc);
break;
}
while (!sr.EndOfStream)
{
char[] buf = new char[16000];
int read = sr.ReadBlock(buf, 0, 16000);
StringBuilder sb = new StringBuilder();
sb.Append(buf, 0, read);
sw.Write(buf, 0, read);
}
sr.Close();
}
byte[] mbuf = ms.GetBuffer();
string sbuf = enc.GetString(mbuf);
return sbuf;
}
///
/// 获取HttpWebRequest返回值
///
/// URL地址
/// PostData
///
public static string GetHttpResult(string url, string postdata = null)
{
try
{
HttpWebRequest request = GetHttpRequest(url, postdata, m_Cookies);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//m_Cookies.Add(response.Cookies);
string res = GetResponseContent(response);
return res;
}
catch (Exception ex)
{
return ex.Message;
}
}
#endregion
}
}