Пользовательские заголовки прокси-сервера с. NET Framework HttpWebRequest с использованием C# - PullRequest
1 голос
/ 16 марта 2020

Я использую класс HttpWebRequest для реализации веб-сканера. Я хотел бы использовать с ним прокси-сервер, который обычно может быть реализован следующим образом:

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://www.example.com/");          

webRequest.Proxy = new WebProxy(proxyUrl, proxyPort);
webRequest.Proxy.Credentials = new NetworkCredential(proxyPassword, proxyPassword);

HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
using (Stream stream = webResponse.GetResponseStream())
{
    StreamReader reader = new StreamReader(stream, Encoding.UTF8);
    Console.WriteLine(reader.ReadToEnd());
}

Однако мне необходимо передать дополнительный параметр прокси-серверу. Поскольку целевой сайт использует HTTPS, параметры должны быть отправлены в начальном запросе CONNECT, который устанавливает безопасный туннель HTTPS. В противном случае прокси-сервер не сможет прочитать их из-за сквозного шифрования.

Заголовок для первоначального запроса CONNECT должен выглядеть следующим образом:

CONNECT example.com:443 HTTP/1.1
X-CustomProperty: 12345

Пока я не смог чтобы найти решение для достижения этой цели ни с классом HttpWebRequest , ни с классом WebClient из. NET Framework. Есть ли возможность передать дополнительные заголовки в начальном запросе CONNECT? Я также доволен решением, в котором используется дополнительная библиотека.

...