dex*_*ter 45 .net c# proxy httpclient
这是代码:
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);
Run Code Online (Sandbox Code Playgroud)
当我最终这样做时:
HttpResponseMessage httpResponseMessage = this.client.PostAsync(urlToPost, new StringContent(data, Encoding.UTF8, this.mediaType)).Result;
Run Code Online (Sandbox Code Playgroud)
它总是抛出
远程服务器返回错误:(407)需要代理身份验证.
对于我这个世界,我不明白.
在IE10中配置或者我使用HttpWebRequest该类时,相同的代理设置工作正常
Dar*_*ryl 97
您将代理凭据设置在错误的位置.
httpClientHandler.Credentials是代理已建立连接后您为服务器提供的凭据.如果你弄错了,你可能会收到401或403的回复.
您需要设置给代理的凭据,否则它将首先拒绝将您连接到服务器.您提供给代理的凭据可能与您提供给服务器的凭据不同.如果你弄错了,你会得到407回复.你得到的是407,因为你根本没有设置这些.
// First create a proxy object
var proxy = new WebProxy
{
Address = new Uri($"http://{proxyHost}:{proxyPort}"),
BypassOnLocal = false,
UseDefaultCredentials = false,
// *** These creds are given to the proxy server, not the web server ***
Credentials = new NetworkCredential(
userName: proxyUserName,
password: proxyPassword)
};
// Now create a client handler which uses that proxy
var httpClientHandler = new HttpClientHandler
{
Proxy = proxy,
};
// Omit this part if you don't need to authenticate with the web server:
if (needServerAuthentication)
{
httpClientHandler.PreAuthenticate = true;
httpClientHandler.UseDefaultCredentials = false;
// *** These creds are given to the web server, not the proxy server ***
httpClientHandler.Credentials = new NetworkCredential(
userName: serverUserName,
password: serverPassword);
}
// Finally, create the HTTP client object
var client = new HttpClient(handler: httpClientHandler, disposeHandler: true);
Run Code Online (Sandbox Code Playgroud)
您需要传递代理处理程序。试试这个对我有用
var handler = new HttpClientHandler();
handler.DefaultProxyCredentials = CredentialCache.DefaultCredentials;
var client = new HttpClient(handler);
HttpResponseMessage response = await client.SendAsync();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63433 次 |
| 最近记录: |