2015-04-24 10 views
20

Ecco il codice:HttpClient e utilizzando il proxy - ricevendo costantemente 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); 

E quando finalmente fare questo:

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

Si getta sempre la

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

Che io non capisco per il mondo di me.

lo stesso proxy istituito funziona bene quando è configurato in IE10 o se uso la classe HttpWebRequest invece

risposta

37

Stai impostando le credenziali del proxy nel posto sbagliato.

httpClientHandler.Credentials sono le credenziali fornite al server dopo che il proxy ha già stabilito una connessione. Se ti sbagli, probabilmente riceverai una risposta 401 o 403.

È necessario impostare le credenziali fornite al proxy oppure rifiuterà di connettersi al server in primo luogo. Le credenziali fornite al proxy potrebbero essere diverse da quelle fornite al server. Se ti sbagli, riceverai una risposta 407. Stai ricevendo un 407 perché non li hai mai impostati affatto.

// 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

ho trovato alcune informazioni utili su here from social.msdn.microsoft.com, e dalle risposte su che così come le prove e ricerche sul System.Net.WebProxy Class è necessario passare le cridentials del proxy nell'oggetto proxy, non il 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), 
}; 

Questo in realtà è destinato per autenticare la connessione al proxy, non il HttpClientHandler.

Problemi correlati