Имеется код связи с определенным сайтом. Через него я получаю данные, которые в процессе успеваю поменять или доработать, а после эти измененные данные мною отправляются вновь на сайт. Все бы ничего, но сам процесс работы, его желательно ускорить, оптимизировать. И чтоб подобное сделать, мне нужно как-то реализовать компрессии gzip для POST метода и декомпрессии gzip для GET метода:
namespace SoftWARE
{
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;
using System.Configuration;
using System.Text;
public class Connecter
{
public CookieContainer cookies = new CookieContainer();
public string OriginUrl = System.Configuration.ConfigurationManager.AppSettings["OriginUrl"];
public HttpWebRequest GetNewRequest(string targetUrl, CookieContainer SessionCookieContainer)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(targetUrl);
request.CookieContainer = SessionCookieContainer;
request.AllowAutoRedirect = false;
return request;
}
public HttpWebResponse MakeRequest(HttpWebRequest request, CookieContainer SessionCookieContainer, Dictionary<string, string> parameters = null, int TypeRequest = 0)
{
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25Accept: */*";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.Proxy = new WebProxy();
System.Net.ServicePointManager.Expect100Continue = false;
System.Net.ServicePointManager.UseNagleAlgorithm = false;
request.ServicePoint.ConnectionLimit = 100;
ServicePointManager.FindServicePoint(new Uri(this.OriginUrl));
request.KeepAlive = true;
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
request.Headers["Origin"] = this.OriginUrl;
if (TypeRequest == 1)
{
request.Headers["X-Requested-With"] = "XMLHttpRequest";
}
if (TypeRequest == 2)
{
request.Headers["Upgrade-Insecure-Requests"] = "1";
}
request.CookieContainer = SessionCookieContainer;
request.AllowAutoRedirect = false;
if (parameters != null)
{
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
string s = "";
foreach (KeyValuePair<string, string> pair in parameters)
{
if (s.Length == 0)
{
s += $"{pair.Key}={pair.Value}";
}
else
{
s += $"&{pair.Key}={pair.Value}";
}
}
byte[] bytes = Encoding.UTF8.GetBytes(s);
using (Stream stream = request.GetRequestStream())
{
stream.Write(bytes, 0, bytes.Length);
}
}
else
{
request.Method = "GET";
}
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
SessionCookieContainer.Add(response.Cookies);
while (response.StatusCode == HttpStatusCode.Found)
{
response.Close();
request = this.GetNewRequest(response.Headers["Location"], SessionCookieContainer);
response = (HttpWebResponse)request.GetResponse();
SessionCookieContainer.Add(response.Cookies);
}
return response;
}
}
}
HttpWebRequestустарел, используйтеHttpClient. Важно! Мы не рекомендуем использоватьHttpWebRequestдля новой разработки. Вместо этого используйтеSystem.Net.Http.HttpClientкласс. – aepot Sep 27 '21 at 12:47