Utilisation d'un proxy avec .NET 4.5 HttpClient
Je suis dépannage d'un bug avec un service que j'appel à l'aide d' .NET HttpClient, en essayant de route de la demande par le biais d'un proxy local (Violoniste), mais mes paramètres de proxy semblent pas prendre effet.
Voici comment j'ai créer le client:
private HttpClient CreateHttpClient(CommandContext ctx, string sid) {
var cookies = new CookieContainer();
var handler = new HttpClientHandler {
CookieContainer = cookies,
UseCookies = true,
UseDefaultCredentials = false,
Proxy = new WebProxy("http://localhost:8888", false, new string[]{}),
UseProxy = true,
};
//snip out some irrelevant setting of authentication cookies
var client = new HttpClient(handler) {
BaseAddress = _prefServerBaseUrl,
};
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
return client;
}
puis-je envoyer la demande par:
var response = CreateHttpClient(ctx, sid).PostAsJsonAsync("api/prefs/", smp).Result;
Demande va directement sur le serveur sans tenter de frapper le proxy. Qu'ai-je manqué?
- Votre service est en cours de test en local sur votre machine? Envisager de contournement de proxy pour les adresses locales.
- Par la voie, création de
HttpClient
cas, c'est cher. Vous devez réutiliser les instances dès que possible. Il y a quelques posts de blog qui parlent de cette accessible à l'aide de Google.
Vous devez vous connecter pour publier un commentaire.
Ce code a fonctionné pour moi:
Remarque que je ne suis pas fournir un tableau vide à mon
WebProxy
constructeur. C'est peut-être le problème?Ah, Le BaseAddress j'ai été pointant vers a été
http://localhost:8081
. S'avère que malgré la mise BypassOnLocal de faux, de toute évidence localhost est toujours assez spécial qu'il contourne le proxy.J'ai ajouté un domaine de liaison dans IIS, le fichier host, entrée au point de ce domaine à l'adresse 127.0.0.1, utilisée domaine nouvellement créé, maintenant ça fonctionne.
http://localhost.:8888
Avis de la magie de point!<system.net> <defaultProxy> <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://localhost.:8888" /> </defaultProxy> </system.net>
Fiddler est configuré pour capturer le trafic de tous les processus? Regardez la barre d'état lorsque vous voyez "la Capture". Il devrait afficher "Tous les Processus" à côté d'elle. Si elle montre des "navigateurs internet", cliquer dessus et de le modifier pour tous les processus. Cela peut être différent selon la version de Fiddler vous utilisez.