Odosielanie požiadaviek .NET HttpClient cez proxy
Nastavte WebProxy v HttpClientHandler a nenechajte smerovanie proxy vypnuté alebo pripojené k nesprávnemu klientovi.
Požiadavka musí používať HttpClient vytvorený s vaším handlerom proxy. Vytvorenie nesúvisiaceho objektu WebProxy neovplyvní trasu iného klienta.
using System;
using System.Net;
using System.Net.Http;
var proxy = new WebProxy("http://203.0.113.10:8080")
{
BypassProxyOnLocal = false
};
using var handler = new HttpClientHandler
{
Proxy = proxy,
UseProxy = true
};
using var client = new HttpClient(handler)
{
Timeout = TimeSpan.FromSeconds(15)
};
using var response = await client.GetAsync("https://example.com/");
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(await response.Content.ReadAsStringAsync());Dokumentačnú adresu nahraďte skutočným HTTP proxy zo svojej služby alebo zo zoznamu HTTP proxy. Táto syntax najvyššej úrovne sa hodí pre moderný konzolový projekt C#; staršie projekty môžu príkazy vložiť do asynchrónneho Main.
Skontrolujte obe vlastnosti handlera: Proxy vyberá koncový bod a UseProxy=true zapína jeho použitie. Ak bod funguje samostatne, ale nie v aplikácii, overte, že žiadny kód nevypína UseProxy a volanie používa túto inštanciu. Vyhradený handler odstraňuje závislosť od zisťovania procesom či operačným systémom.
Keď prevádzkovateľ poskytne účet, priraďte NetworkCredential vlastnosti WebProxy.Credentials. Authorization webu patrí inému kroku a verejná položka IP:port neposkytuje predvolené prihlasovacie údaje. Listener http:// môže prenášať HTTPS tunelom; zachovajte bežné overovanie cieľa.
Tento krátky program uvoľní objekty pri ukončení. Pri opakovaných volaniach služby dodržujte pokyny .NET k životnosti klienta a ponechajte klienta/handler pre záťaž namiesto obnovovania fondov spojení pri každej požiadavke. Sledujte vrátený stav: funkčná cesta proxy môže naďalej preniesť odmietnutie webu.