добавить прокси в HttpRequestMessage - PullRequest
0 голосов
/ 02 августа 2020

У меня есть код для запуска http-запроса из этого кода на githb .

Как мне добавить прокси в свой http-запрос?

public HttpRequestMessage MakeRequest(HttpMethod method, string url, IEnumerable<KeyValuePair<string, string>> args = null, string proxy)
{
    HttpRequestMessage content = new HttpRequestMessage(method, GetRequestUrl(url));
    if (args is null)
        args = Enumerable.Empty<KeyValuePair<string, string>>();
   
    content.Headers.Add("X-MBX-APIKEY", Client.APIKey);
    if (method == HttpMethod.Get)
    {
        content.RequestUri = new Uri(content.RequestUri.OriginalString +
            CreateQueryString(BuildRequest(args)));
    } else content.Content = new FormUrlEncodedContent(BuildRequest(args));

    return content;
}

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

Вы можете создать свой собственный HttpClientFactory и использовать его для отправки запросов. Он обеспечит поддержку прокси для вашего запроса.

public class ProxyHttpClientFactory: HttpClientFactory {
  private readonly ICredentials _credentials;
  private readonly IWebProxy _proxy;

  public ProxyHttpClientFactory(ProxyOptions options) {
    _credentials = new NetworkCredential(options.Login, options.Password, options.ProxyUri);
    _proxy = new WebProxy(options.ProxyUri, true, null, _credentials);
  }

  protected override HttpMessageHandler CreateHandler(CreateHttpClientArgs args) {
    Console.WriteLine("Proxy got called");

    return new HttpClientHandler {
      UseProxy = true,
      Proxy = _proxy,
      Credentials = _credentials,
      SslProtocols = SslProtocols.Tls12,
      UseCookies = false,
      ServerCertificateCustomValidationCallback = (sender, certificate, chain, sslPolicyErrors) =>true
    };
  }
}
0 голосов
/ 02 августа 2020

Вы можете создать свой собственный класс прокси.

public class YourProxy : IWebProxy
{
    private Uri uri;

    public YourProxy(Uri uri)
    {
        this.uri = uri;
    }

    public ICredentials Credentials { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }

    public Uri GetProxy(Uri destination)
    {
        throw new NotImplementedException();
    }

    public bool IsBypassed(Uri host)
    {
        throw new NotImplementedException();
    }
}

Ниже вы можете добавить прокси к запросу.

HttpWebRequest webrequest = (HttpWebRequest)WebRequest.CreateHttp(uri);
IWebProxy proxy = new YourProxy(new Uri("http://xx.xx.xx.xxx:xxxx"));
proxy.Credentials = new NetworkCredential("xxxx", "xxxx");
webrequest.Proxy = proxy;

Ссылка : { ссылка }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...