using ZhiHe.Entity.Corpize;
using System;
using System.IO;
using System.IO.Compression;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using ZhiHe.Entity.BaiDu;
using ZhiHe.Utils;
namespace ZhiHe.Common
{
public static class HtmlHelper
{
private static readonly TimeSpan requestTimeout = new TimeSpan(0, 0, 20);
#region HttpClient 实现
#region get
/// <summary>
/// get 常规
/// </summary>
public static async ValueTask<string> GetHtmlAsync(HttpClient client)
{
string strWebData = string.Empty;
try
{
var request = new HttpRequestMessage(HttpMethod.Get, string.Empty);
client.Timeout = requestTimeout;
var response = await client.SendAsync(request);
if (response.Content.Headers.ContentEncoding == null || response.Content.Headers.ContentEncoding.Count == 0)
strWebData = await response.Content.ReadAsStringAsync();
else
{
if (response.Content.Headers.ContentEncoding.Contains("gzip"))
{
using (StreamReader reader = new StreamReader(new GZipStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else if (response.Content.Headers.ContentEncoding.Contains("deflate"))
{
using (StreamReader reader = new StreamReader(new DeflateStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
}
return strWebData;
}
catch
{
return strWebData;
}
}
/// <summary>
/// get 带url,超时
/// </summary>
public static async ValueTask<string> GetHtmlAsync(string url, TimeSpan timeout, HttpClient client)
{
string strWebData = string.Empty;
try
{
var request = new HttpRequestMessage(HttpMethod.Get, url);
client.Timeout = timeout;
var response = await client.SendAsync(request);
if (response.Content.Headers.ContentEncoding == null || response.Content.Headers.ContentEncoding.Count == 0)
strWebData = await response.Content.ReadAsStringAsync();
else
{
if (response.Content.Headers.ContentEncoding.Contains("gzip"))
{
using (StreamReader reader = new StreamReader(new GZipStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else if (response.Content.Headers.ContentEncoding.Contains("deflate"))
{
using (StreamReader reader = new StreamReader(new DeflateStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
}
return strWebData;
}
catch
{
return strWebData;
}
}
/// <summary>
/// get 带url,ua,超时
/// </summary>
public static async ValueTask<string> GetHtmlAsync(string url, string ua, TimeSpan timeout, HttpClient client)
{
string strWebData = string.Empty;
try
{
var request = new HttpRequestMessage(HttpMethod.Get, url);
client.Timeout = timeout;
request.Headers.Add("User-Agent", ua);
var response = await client.SendAsync(request);
if (response.Content.Headers.ContentEncoding == null || response.Content.Headers.ContentEncoding.Count == 0)
strWebData = await response.Content.ReadAsStringAsync();
else
{
if (response.Content.Headers.ContentEncoding.Contains("gzip"))
{
using (StreamReader reader = new StreamReader(new GZipStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else if (response.Content.Headers.ContentEncoding.Contains("deflate"))
{
using (StreamReader reader = new StreamReader(new DeflateStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
}
return strWebData;
}
catch
{
return strWebData;
}
}
#endregion
#region post
/// <summary>
/// post
/// </summary>
public static async ValueTask<string> PostHtmlAsync(string strPostData, TimeSpan timeout, HttpClient client)
{
string strWebData = string.Empty;
try
{
client.Timeout = timeout;
var response = await client.PostAsync(string.Empty, new StringContent(strPostData));
if (response.Content.Headers.ContentEncoding == null || response.Content.Headers.ContentEncoding.Count == 0)
strWebData = await response.Content.ReadAsStringAsync();
else
{
if (response.Content.Headers.ContentEncoding.Contains("gzip"))
{
using (StreamReader reader = new StreamReader(new GZipStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else if (response.Content.Headers.ContentEncoding.Contains("deflate"))
{
using (StreamReader reader = new StreamReader(new DeflateStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
}
return strWebData;
}
catch
{
return strWebData;
}
}
/// <summary>
/// post 带url
/// </summary>
public static async ValueTask<string> PostHtmlAsync(string url, string strPostData, TimeSpan timeout, HttpClient client)
{
string strWebData = string.Empty;
try
{
client.Timeout = timeout;
var response = await client.PostAsync(url, new StringContent(strPostData));
if (response.Content.Headers.ContentEncoding == null || response.Content.Headers.ContentEncoding.Count == 0)
strWebData = await response.Content.ReadAsStringAsync();
else
{
if (response.Content.Headers.ContentEncoding.Contains("gzip"))
{
using (StreamReader reader = new StreamReader(new GZipStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else if (response.Content.Headers.ContentEncoding.Contains("deflate"))
{
using (StreamReader reader = new StreamReader(new DeflateStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
}
return strWebData;
}
catch
{
return strWebData;
}
}
/// <summary>
/// post 带ua
/// </summary>
public static async ValueTask<string> PostHtmlUaAsync(string ua, string strPostData, TimeSpan timeout, HttpClient client)
{
string strWebData = string.Empty;
try
{
client.Timeout = timeout;
client.DefaultRequestHeaders.Add("User-Agent", ua);
var response = await client.PostAsync(string.Empty, new StringContent(strPostData));
if (response.Content.Headers.ContentEncoding == null || response.Content.Headers.ContentEncoding.Count == 0)
strWebData = await response.Content.ReadAsStringAsync();
else
{
if (response.Content.Headers.ContentEncoding.Contains("gzip"))
{
using (StreamReader reader = new StreamReader(new GZipStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else if (response.Content.Headers.ContentEncoding.Contains("deflate"))
{
using (StreamReader reader = new StreamReader(new DeflateStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
}
return strWebData;
}
catch
{
return strWebData;
}
}
/// <summary>
/// post 百度
/// </summary>
public static async ValueTask<MobadsResponse> PostHtmlByBaiDuAsync(byte[] buffer, TimeSpan timeout, HttpClient client)
{
try
{
client.Timeout = timeout;
var response = await client.PostAsync(string.Empty, new ByteArrayContent(buffer));
return ProtoBuf.Serializer.Deserialize<MobadsResponse>(await response.Content.ReadAsStreamAsync());
}
catch
{
return null;
}
}
/// <summary>
/// post connettype为application/json
/// </summary>
public static async ValueTask<string> PostHtmlContentTypeJsonAsync(string strPostData, TimeSpan timeout, HttpClient client)
{
string strWebData = string.Empty;
try
{
client.Timeout = timeout;
var response = await client.PostAsync(string.Empty, new StringContent(strPostData, Encoding.UTF8, "application/json"));
if (response.Content.Headers.ContentEncoding == null || response.Content.Headers.ContentEncoding.Count == 0)
strWebData = await response.Content.ReadAsStringAsync();
else
{
if (response.Content.Headers.ContentEncoding.Contains("gzip"))
{
using (StreamReader reader = new StreamReader(new GZipStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else if (response.Content.Headers.ContentEncoding.Contains("deflate"))
{
using (StreamReader reader = new StreamReader(new DeflateStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
}
return strWebData;
}
catch
{
return strWebData;
}
}
/// <summary>
/// post connettype为text/plain
/// </summary>
public static async ValueTask<string> PostHtmlContentTypeTextAsync(string strPostData, TimeSpan timeout, HttpClient client)
{
string strWebData = string.Empty;
try
{
client.Timeout = timeout;
var response = await client.PostAsync(string.Empty, new StringContent(strPostData, Encoding.UTF8, "text/plain"));
if (response.Content.Headers.ContentEncoding == null || response.Content.Headers.ContentEncoding.Count == 0)
strWebData = await response.Content.ReadAsStringAsync();
else
{
if (response.Content.Headers.ContentEncoding.Contains("gzip"))
{
using (StreamReader reader = new StreamReader(new GZipStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else if (response.Content.Headers.ContentEncoding.Contains("deflate"))
{
using (StreamReader reader = new StreamReader(new DeflateStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
}
return strWebData;
}
catch
{
return strWebData;
}
}
/// <summary>
/// 玩咖专用请求方法
/// </summary>
public static async ValueTask<string> PostHtmlWanKaAsync(string ua, string strPostData, TimeSpan timeout, HttpClient client)
{
string strWebData = string.Empty;
try
{
client.Timeout = timeout;
client.DefaultRequestHeaders.Add("User-Agent", ua);
HttpContent content = new ByteArrayContent(Tool.GzipCompress(Encoding.UTF8.GetBytes(strPostData)));
content.Headers.ContentType = new MediaTypeHeaderValue("application/json")
{
CharSet = "utf-8"
};
var response = await client.PostAsync(string.Empty, content);
if (response.Content.Headers.ContentEncoding == null || response.Content.Headers.ContentEncoding.Count == 0)
strWebData = await response.Content.ReadAsStringAsync();
else
{
if (response.Content.Headers.ContentEncoding.Contains("gzip"))
{
using (StreamReader reader = new StreamReader(new GZipStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else if (response.Content.Headers.ContentEncoding.Contains("deflate"))
{
using (StreamReader reader = new StreamReader(new DeflateStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
}
return strWebData;
}
catch
{
return strWebData;
}
}
/// <summary>
/// post 极光
/// </summary>
public static async ValueTask<AdResponse> PostHtmlByJiGuangAsync(byte[] buffer, TimeSpan timeout, HttpClient client)
{
try
{
client.Timeout = timeout;
var response = await client.PostAsync(string.Empty, new ByteArrayContent(buffer));
return ProtoBuf.Serializer.Deserialize<AdResponse>(await response.Content.ReadAsStreamAsync());
}
catch
{
return null;
}
}
/// <summary>
/// 京东专用
/// </summary>
public static async ValueTask<Entity.Request.JingDongYingXiao.BidResponse> PostHtmlByJingDongAsync(byte[] buffer, TimeSpan timeout, HttpClient client)
{
try
{
client.Timeout = timeout;
HttpContent content = new ByteArrayContent(buffer);
content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
var response = await client.PostAsync(string.Empty, content);
return ProtoBuf.Serializer.Deserialize<Entity.Request.JingDongYingXiao.BidResponse>(await response.Content.ReadAsStreamAsync());
}
catch
{
return null;
}
}
/// <summary>
/// application/json且不包含charset=utf-8
/// </summary>
public static async ValueTask<string> PostHtmlContentTypeJsonNoCharsetAsync(string strPostData, TimeSpan timeout, HttpClient client)
{
string strWebData = string.Empty;
try
{
client.Timeout = timeout;
HttpContent content = new StringContent(strPostData);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var response = await client.PostAsync(string.Empty, content);
if (response.Content.Headers.ContentEncoding == null || response.Content.Headers.ContentEncoding.Count == 0)
strWebData = await response.Content.ReadAsStringAsync();
else
{
if (response.Content.Headers.ContentEncoding.Contains("gzip"))
{
using (StreamReader reader = new StreamReader(new GZipStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else if (response.Content.Headers.ContentEncoding.Contains("deflate"))
{
using (StreamReader reader = new StreamReader(new DeflateStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
}
return strWebData;
}
catch
{
return strWebData;
}
}
public static async ValueTask<string> PostHtmlContentTypeFormAsync(string strPostData, TimeSpan timeout, HttpClient client)
{
string strWebData = string.Empty;
try
{
client.Timeout = timeout;
var response = await client.PostAsync(string.Empty, new StringContent(strPostData, Encoding.UTF8, "application/x-www-form-urlencoded"));
if (response.Content.Headers.ContentEncoding == null || response.Content.Headers.ContentEncoding.Count == 0)
strWebData = await response.Content.ReadAsStringAsync();
else
{
if (response.Content.Headers.ContentEncoding.Contains("gzip"))
{
using (StreamReader reader = new StreamReader(new GZipStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else if (response.Content.Headers.ContentEncoding.Contains("deflate"))
{
using (StreamReader reader = new StreamReader(new DeflateStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
}
return strWebData;
}
catch
{
return strWebData;
}
}
/// <summary>
/// post 带X-CAD-S2S-SIGNITURE ---省广畅思API接口专用
/// </summary>
/// <param name="strPostData"></param>
/// <param name="timeout"></param>
/// <param name="client"></param>
/// <param name="signiture"></param>
/// <returns></returns>
public static async ValueTask<string> PostHtmlSignitureAsync(string strPostData, TimeSpan timeout, HttpClient client, string signiture)
{
string strWebData = string.Empty;
try
{
client.Timeout = timeout;
client.DefaultRequestHeaders.Add("X-CAD-S2S-SIGNITURE", signiture);
var response = await client.PostAsync(string.Empty, new StringContent(strPostData));
if (response.Content.Headers.ContentEncoding == null || response.Content.Headers.ContentEncoding.Count == 0)
strWebData = await response.Content.ReadAsStringAsync();
else
{
if (response.Content.Headers.ContentEncoding.Contains("gzip"))
{
using (StreamReader reader = new StreamReader(new GZipStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else if (response.Content.Headers.ContentEncoding.Contains("deflate"))
{
using (StreamReader reader = new StreamReader(new DeflateStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
}
return strWebData;
}
catch
{
return strWebData;
}
}
public static async ValueTask<string> PostHtmlAsyncBoBoMaterial(string url, string strPostData, TimeSpan timeout, HttpClient client, string dspId, string timeSpan, string token)
{
string strWebData = string.Empty;
try
{
client.Timeout = timeout;
client.DefaultRequestHeaders.Add("dsp_id", dspId);
client.DefaultRequestHeaders.Add("timestamp", timeSpan);
client.DefaultRequestHeaders.Add("token", token);
var response = await client.PostAsync(url, new StringContent(strPostData));
if (response.Content.Headers.ContentEncoding == null || response.Content.Headers.ContentEncoding.Count == 0)
strWebData = await response.Content.ReadAsStringAsync();
else
{
if (response.Content.Headers.ContentEncoding.Contains("gzip"))
{
using (StreamReader reader = new StreamReader(new GZipStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else if (response.Content.Headers.ContentEncoding.Contains("deflate"))
{
using (StreamReader reader = new StreamReader(new DeflateStream(await response.Content.ReadAsStreamAsync(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
}
return strWebData;
}
catch
{
return strWebData;
}
}
#endregion
#endregion
#region HttpWebRequest 实现, core环境下高并发端口占用太多,导致503错误
#region Get
public static async ValueTask<string> GetHtmlIsGzip(string url)
{
HttpWebRequest wReq = null;
string strWebData = string.Empty;
try
{
wReq = (HttpWebRequest)WebRequest.Create(@url);
wReq.Proxy = null;
wReq.Accept = "*/*";
wReq.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36";
wReq.Headers.Add("Accept-Language", "zh-cn,en-us;q=0.5");
wReq.Headers.Add("Accept-Encoding", "gzip,deflate");
wReq.Method = "GET";
wReq.Timeout = 120000;
wReq.ServicePoint.ConnectionLimit = int.MaxValue;
wReq.KeepAlive = false;
wReq.AllowWriteStreamBuffering = false;
using (HttpWebResponse wResp = (HttpWebResponse)await wReq.GetResponseAsync())
{
if (string.IsNullOrWhiteSpace(wResp.ContentEncoding))
{
using (StreamReader reader = new StreamReader(wResp.GetResponseStream(), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else
{
if (wResp.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase))
{
using (StreamReader reader = new StreamReader(new GZipStream(wResp.GetResponseStream(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else if (wResp.ContentEncoding.Equals("deflate", StringComparison.InvariantCultureIgnoreCase))
{
using (StreamReader reader = new StreamReader(new DeflateStream(wResp.GetResponseStream(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
}
}
return strWebData;
}
catch
{
return strWebData;
}
finally
{
if (wReq != null)
wReq.Abort();
}
}
public static async ValueTask<string> GetHtmlIsGzip(string url, string ua)
{
HttpWebRequest wReq = null;
string strWebData = string.Empty;
try
{
wReq = (HttpWebRequest)WebRequest.Create(@url);
wReq.Proxy = null;
wReq.Accept = "*/*";
wReq.UserAgent = ua;
wReq.Headers.Add("Accept-Language", "zh-cn,en-us;q=0.5");
wReq.Headers.Add("Accept-Encoding", "gzip,deflate");
wReq.Method = "GET";
wReq.Timeout = 120000;
wReq.ServicePoint.ConnectionLimit = int.MaxValue;
wReq.KeepAlive = false;
wReq.AllowWriteStreamBuffering = false;
using (HttpWebResponse wResp = (HttpWebResponse)await wReq.GetResponseAsync())
{
if (string.IsNullOrWhiteSpace(wResp.ContentEncoding))
{
using (StreamReader reader = new StreamReader(wResp.GetResponseStream(), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else
{
if (wResp.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase))
{
using (StreamReader reader = new StreamReader(new GZipStream(wResp.GetResponseStream(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else if (wResp.ContentEncoding.Equals("deflate", StringComparison.InvariantCultureIgnoreCase))
{
using (StreamReader reader = new StreamReader(new DeflateStream(wResp.GetResponseStream(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
}
}
return strWebData;
}
catch
{
return strWebData;
}
finally
{
if (wReq != null)
wReq.Abort();
}
}
#endregion
#region Post
public static async ValueTask<string> PostHtmlIsGzip(string url, string strPostdata)
{
HttpWebRequest wReq = null;
try
{
string strWebData = string.Empty;
wReq = (HttpWebRequest)WebRequest.Create(@url);
wReq.Proxy = null;
wReq.ContentType = "application/json";
wReq.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
wReq.Headers.Add("Accept-Encoding", "gzip,deflate");
wReq.ServicePoint.Expect100Continue = false;
wReq.ServicePoint.UseNagleAlgorithm = false;
wReq.ServicePoint.ConnectionLimit = int.MaxValue;
wReq.AllowWriteStreamBuffering = false;
wReq.Method = "POST";
wReq.Timeout = 50000;
wReq.KeepAlive = false;
byte[] buffer = Encoding.UTF8.GetBytes(strPostdata);
wReq.ContentLength = buffer.Length;
wReq.GetRequestStream().Write(buffer, 0, buffer.Length);
using (HttpWebResponse wResp = (HttpWebResponse)await wReq.GetResponseAsync())
{
if (string.IsNullOrWhiteSpace(wResp.ContentEncoding))
{
using (StreamReader reader = new StreamReader(wResp.GetResponseStream(), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else
{
if (wResp.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase))
{
using (StreamReader reader = new StreamReader(new GZipStream(wResp.GetResponseStream(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else if (wResp.ContentEncoding.Equals("deflate", StringComparison.InvariantCultureIgnoreCase))
{
using (StreamReader reader = new StreamReader(new DeflateStream(wResp.GetResponseStream(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
}
}
return strWebData;
}
catch (Exception ex)
{
Log.SaveLog("PostHtmlIsGzip", ex.Message + ex.Source + url + strPostdata);
return null;
}
finally
{
if (wReq != null)
wReq.Abort();
}
}
public static async ValueTask<string> PostHtmlIsGzipByStatusCode(string url, string strPostdata)
{
HttpWebRequest wReq = null;
try
{
string strWebData = string.Empty;
wReq = (HttpWebRequest)WebRequest.Create(@url);
wReq.Proxy = null;
wReq.ContentType = "application/json";
wReq.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
wReq.Headers.Add("Accept-Encoding", "gzip,deflate");
wReq.ServicePoint.Expect100Continue = false;
wReq.ServicePoint.UseNagleAlgorithm = false;
wReq.ServicePoint.ConnectionLimit = int.MaxValue;
wReq.AllowWriteStreamBuffering = false;
wReq.Method = "POST";
wReq.Timeout = 50000;
wReq.KeepAlive = false;
byte[] buffer = Encoding.UTF8.GetBytes(strPostdata);
wReq.ContentLength = buffer.Length;
wReq.GetRequestStream().Write(buffer, 0, buffer.Length);
using (HttpWebResponse wResp = (HttpWebResponse)await wReq.GetResponseAsync())
{
if (string.IsNullOrWhiteSpace(wResp.ContentEncoding))
{
using (StreamReader reader = new StreamReader(wResp.GetResponseStream(), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else
{
if (wResp.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase))
{
using (StreamReader reader = new StreamReader(new GZipStream(wResp.GetResponseStream(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
else if (wResp.ContentEncoding.Equals("deflate", StringComparison.InvariantCultureIgnoreCase))
{
using (StreamReader reader = new StreamReader(new DeflateStream(wResp.GetResponseStream(), CompressionMode.Decompress), Encoding.UTF8))
strWebData = await reader.ReadToEndAsync();
}
}
}
return strWebData;
}
catch (WebException ex)
{
if (((HttpWebResponse)ex.Response).StatusCode != HttpStatusCode.BadRequest)
Log.SaveLog("PostHtmlIsGzip", ex.Message + ex.Source + url + strPostdata);
return null;
}
finally
{
if (wReq != null)
wReq.Abort();
}
}
public static async ValueTask<MobadsResponse> PostHtmlByBaiDu(string url, byte[] buffer)
{
HttpWebRequest wReq = null;
try
{
MobadsResponse strWebData = null;
wReq = (HttpWebRequest)WebRequest.Create(@url);
wReq.Proxy = null;
wReq.ContentType = "x-protobuf";
wReq.Connection = "KeepAlive";
wReq.ServicePoint.Expect100Continue = false;
wReq.ServicePoint.ConnectionLimit = int.MaxValue;
wReq.AllowWriteStreamBuffering = false;
wReq.Method = "POST";
wReq.Timeout = 200000;
wReq.ContentLength = buffer.Length;
wReq.GetRequestStream().Write(buffer, 0, buffer.Length);
using (HttpWebResponse wResp = (HttpWebResponse)await wReq.GetResponseAsync())
{
strWebData = ProtoBuf.Serializer.Deserialize<MobadsResponse>(wResp.GetResponseStream());
}
return strWebData;
}
catch
{
return null;
}
finally
{
if (wReq != null)
wReq.Abort();
}
}
public static async Task<Entity.Corpize.BidResponse> PostHtmlByCorpize(string url, byte[] buffer)
{
HttpWebRequest wReq = null;
try
{
HttpClient client = new HttpClient();
Entity.Corpize.BidResponse strWebData = null;
HttpContent content = new ByteArrayContent(buffer);
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Add("ContentType", "application/octet-stream");
client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip,deflate");
client.DefaultRequestHeaders.Add("User-Agent", "ZhiHe");
client.DefaultRequestHeaders.Connection.Add("keep-alive");
client.Timeout = new TimeSpan(0, 0, 20);
var response = await client.PostAsync(string.Empty, content);
return ProtoBuf.Serializer.Deserialize<Entity.Corpize.BidResponse>(await response.Content.ReadAsStreamAsync());
//wReq = (HttpWebRequest)WebRequest.Create(@url);
//wReq.Proxy = null;
////wReq.Accept = "application/x-protobuf";
//wReq.ContentType = "application/octet-stream";
//wReq.Connection = "KeepAlive";
//wReq.ServicePoint.Expect100Continue = false;
//wReq.ServicePoint.ConnectionLimit = int.MaxValue;
//wReq.AllowWriteStreamBuffering = false;
//wReq.Method = "POST";
//wReq.Timeout = 120000;
//wReq.ContentLength = buffer.Length;
//wReq.GetRequestStream().Write(buffer, 0, buffer.Length);
//using (HttpWebResponse wResp = (HttpWebResponse)wReq.GetResponse())
//{
// strWebData = ProtoBuf.Serializer.Deserialize<Corpize.BidResponse>(wResp.GetResponseStream());
//}
return strWebData;
}
catch (Exception ex)
{
return null;
}
finally
{
if (wReq != null)
wReq.Abort();
}
}
#endregion
#endregion
}
}