2015-04-24 16 views
20

bekommen Hier ist der Code:Httpclient und Proxy - ständig 407

HttpClient client = null; 
HttpClientHandler httpClientHandler = new HttpClientHandler() 
{ 
    Proxy = new WebProxy(string.Format("{0}:{1}", proxyServerSettings.Address, 
    proxyServerSettings.Port),false), 
    PreAuthenticate = true, 
    UseDefaultCredentials = false, 
}; 


this.httpClientHandler.Credentials = new NetworkCredential(proxyServerSettings.UserName, 
         proxyServerSettings.Password); 


this.client = new HttpClient(this.httpClientHandler); 

Und als ich endlich tun:

HttpResponseMessage httpResponseMessage = this.client.PostAsync(urlToPost, new StringContent(data, Encoding.UTF8, this.mediaType)).Result; 

Es ist immer führt den

The remote server returned an error: (407) Proxy Authentication Required.

Was ich verstehe nicht für die Welt von mir.

Das gleiche Proxy einrichten funktioniert gut, wenn in IE10 konfiguriert ist, oder wenn ich die HttpWebRequest Klasse statt

Antwort

37

Sie an der falschen Stelle die Proxy-Anmeldeinformationen festlegen.

httpClientHandler.Credentials sind die Anmeldeinformationen, die Sie dem Server geben, nachdem der Proxy bereits eine Verbindung hergestellt hat. Wenn Sie diese falsch verstehen, erhalten Sie wahrscheinlich eine 401 oder 403 Antwort.

Sie müssen die Anmeldeinformationen für den Proxy festlegen, oder es wird sich ablehnen, Sie mit dem Server an erster Stelle zu verbinden. Die Anmeldeinformationen, die Sie dem Proxyserver bereitstellen, können sich von denen unterscheiden, die Sie dem Server bereitstellen. Wenn Sie diese falsch verstehen, erhalten Sie eine Antwort von 407. Du bekommst einen 407, weil du diese nie gesetzt hast.

// First create a proxy object 

string proxyUri = 
    string.Format("{0}:{1}", proxyServerSettings.Address, proxyServerSettings.Port); 

NetworkCredential proxyCreds = new NetworkCredential(
    proxyServerSettings.UserName, 
    proxyServerSettings.Password 
); 

WebProxy proxy = new WebProxy(proxyUri, false) 
{ 
    UseDefaultCredentials = false, 
    Credentials = proxyCreds, 
}; 

// Now create a client handler which uses that proxy 

HttpClient client = null; 
HttpClientHandler httpClientHandler = new HttpClientHandler() 
{ 
    Proxy = proxy, 
    PreAuthenticate = true, 
    UseDefaultCredentials = false, 
}; 

// You only need this part if the server wants a username and password: 

string 
    httpUserName = "?????", 
    httpPassword = "secret"; 

httpClientHandler.Credentials = new NetworkCredential(httpUserName, httpPassword); 

client = new HttpClient(httpClientHandler); 
0

Ich fand einige hilfreiche Informationen über diese here from social.msdn.microsoft.com, und aus den Antworten auf die sowie Tests und Forschung in die System.Net.WebProxy Class müssen Sie die Proxy-cridentials in dem Proxy-Objekt zu übergeben, nicht die HttpClientHandler.

{ 
    Proxy = new WebProxy(string.Format("{0}:{1}", proxyServerSettings.Address, 
    proxyServerSettings.Port),false), 
    PreAuthenticate = true, 
    UseDefaultCredentials = false, 
    Credentials = new System.Net.NetworkCredential(proxyServerSettings.UserName, 
        proxyServerSettings.Password), 
}; 

Dies ist eigentlich gemeint, die Verbindung zum Proxy zu authentifizieren, nicht die HttpClientHandler.

Verwandte Themen