我正在构建一个 .NET Core 8 应用程序,它使用 Flurl 将 HTTP 请求发送到 REST API。
当我使用我的凭据手动设置代理时,它工作正常。 但是,当我不设置凭据时,请求将使用默认系统代理设置,但不使用当前用户凭据。
注意:使用同一用户从命令行启动 cURL 效果很好。
这是我正在使用的代码:
// Uncomment that to make it work :
//FlurlHttp.Clients.WithDefaults( builder => builder
// .ConfigureInnerHandler( hch => {
// hch.PreAuthenticate = true;
// // Current user credentials required :
// hch.Proxy = new System.Net.WebProxy( "http://my-proxy:myport", true, null, new NetworkCredential( "mydomain\\mylogin", "mypassword" ) );
// hch.UseProxy = true;
// } ) );
var response = await "https://the-oauth-server/oauth/token"
.PostUrlEncodedAsync( new {
client_id = "my-client-id",
client_secret = "my-client-secret",
grant_type = "client_credentials",
scope = "the-scope"
} );
// Without the manual proxy configuration (with the current user credentials !)
// Exception : The proxy tunnel request to proxy 'http://my-proxy:myport/' failed with status code '407'
我尝试像这样设置代理:
hch.Proxy = System.Net.WebRequest.GetSystemWebProxy();
并尝试像这样设置凭据:
hch.Proxy.Credentials = CredentialCache.DefaultCredentials;
我还没有测试过这个,但我认为你只需要在代理上设置
UseDefaultCredentials
(以及处理程序上的maybe?)到true
:
hch.Proxy = new System.Net.WebProxy("http://my-proxy:myport", true)
{
UseDefaultCredentials = true
};
hch.UseProxy = true;
// I'm not certain if this is necessary; try without first:
hch.UseDefaultCredentials = true;