2013-05-13 3 views
42

Ich bin eine Fehlersuche mit einem Dienst, den ich über .NET HttpClient aufrufen, versuchen, die Anforderung über einen lokalen Proxy (Fiddler) zu leiten, aber meine Proxyeinstellungen scheinen nicht wirksam werden .Verwenden eines Proxy mit .NET 4.5 HttpClient

Hier ist, wie ich den Client zu erstellen:

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; 
} 

dann schicke ich die Anfrage von:

var response = CreateHttpClient(ctx, sid).PostAsJsonAsync("api/prefs/", smp).Result; 

Anfrage geht direkt an den Server ohne zu versuchen, den Proxy zu treffen. Was habe ich verpasst?

+0

Wird Ihr Service auf Ihrem lokalen Computer getestet? Ziehen Sie Proxy-Umgehung für lokale Adressen in Betracht. – Xaqron

+0

Übrigens ist das Erstellen von 'HttpClient'-Instanzen teuer. Sie sollten Instanzen nach Möglichkeit wiederverwenden. Es gibt ein paar Blog-Posts, die über Google erreichbar sind. – NathanAldenSr

Antwort

7

Ah, die BaseAddress, auf die ich zeigte, war http://localhost:8081. Es stellt sich heraus, dass trotz Einstellung von BypassOnLocal auf false offensichtlich Localhost immer noch so speziell ist, dass es den Proxy umgeht.

Ich habe eine Domain-Bindung in IIS, Host-Datei-Eintrag, um diese Domäne auf 127.0.0.1, verwendete neu erstellte Domäne, jetzt funktioniert es hinzugefügt.

+6

Sie können auch 'http: // localhost.: 8888' verwenden. Beachten Sie den magischen Punkt! –

+2

Ich bekomme eine ungültige Anfrage - Ungültiger Hostname, wenn ich die. nach localhost – Michael

+0

@DarrelMiller Ich bekomme keine Änderungen, nachdem ich localhost hinzufügen. ' ' – felickz

1

Ist Fiddler so konfiguriert, dass Datenverkehr von allen Prozessen erfasst wird? Sehen Sie sich die Statusleiste an, in der Sie "Capturing" sehen. Es sollte "Alle Prozesse" daneben anzeigen. Wenn es "Webbrowser" anzeigt, klicken Sie darauf und ändern Sie es in alle Prozesse. Dies kann je nach der von Ihnen verwendeten Version von Fiddler unterschiedlich sein.

38

Dieser Code funktioniert für mich:

var httpClientHandler = new HttpClientHandler 
         { 
          Proxy = new WebProxy("http://localhost:8888", false), 
          UseProxy = true 
         } 

Bitte beachte, dass ich nicht ein leeres Array zu meinem WebProxy Konstruktor bin zu liefern. Vielleicht ist das das Problem?

+0

die String-Array für mich gearbeitet Entfernen auch. Ich musste einen Eintrag bei HOSTS, um den Proxy auf localhost arbeiten zu lassen. –

+0

Du hast gerade meinen Tag gerettet^_ ^ –