シミュレーションリクエスト(シミュレーションヘッダgzip解凍汎用)
1694 ワード
private static T GetDataCommonMethod(string url, string host, HeaderData headerData) where T : class
{
// Host
var client = new WebClient();
var headerStr = $"Host: {host}" + "
" +
"User-Agent: ......" + "
" +
@"Accept: application/json, text/plain, */*" + "
" +
"Accept-Encoding: gzip, deflate" + "
" +
"Accept-Language: zh-cn" + "
" +
$"Cookie: m={headerData.m}; u={headerData.u}; wx={headerData.wx}; ......" + "
";
var rawHeaders = headerStr.Split(new[] { '
', '\r' }, StringSplitOptions.RemoveEmptyEntries).ToList();
var headerPairs = rawHeaders.Select(x =>
{
var items = x.Split(new[] { ':' }, 2, StringSplitOptions.RemoveEmptyEntries);
var key = items[0].Trim();
var value = items[1].Trim();
return new ValueTuple(key, value);
}).ToList();
headerPairs.ForEach(x =>
{
client.Headers.Set(x.Item1, x.Item2);
});
// gzip string
byte[] rawBytes = client.DownloadData(url);
var stream = new MemoryStream(rawBytes);
GZipStream g = new GZipStream(stream, CompressionMode.Decompress);
//gzip
var length = BitConverter.ToInt32(rawBytes, rawBytes.Length - 4);
byte[] bytes = new byte[length];
g.Read(bytes, 0, bytes.Length);
// UTF8
string s0 = System.Text.Encoding.UTF8.GetString(bytes);
T result = JsonConvert.DeserializeObject(s0);
return result;
}