Я создаю приложение .NET Core 8, которое отправляет HTTP-запрос в REST API с помощью Flurl.
Когда я вручную устанавливаю прокси со своими учетными данными, он работает нормально. Однако если я не устанавливаю свои учетные данные, запрос использует настройки системного прокси-сервера по умолчанию, но не использует текущие учетные данные пользователя.
Примечание: запуск 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
на WebProxy
, чтобы true
:
hch.Proxy = new System.Net.WebProxy("http://my-proxy:myport", true)
{
UseDefaultCredentials = true
};
hch.UseProxy = true;
Спасибо за твой ответ, Тодд.
FlurlHttp.Clients.WithDefaults( builder => builder.ConfigureInnerHandler( hch => hch.Proxy = new System.Net.WebProxy( "the-proxy:the-port" ) { UseDefaultCredentials = true } ) );
делает свою работу!
Я пытался
hch.UseDefaultCredentials = true;
Но это не то же самое, это не работает.
(И вам тоже спасибо за авторинг Flurl)
Рад, что это сработало! Я отредактировал свой ответ, удалив ту часть, которая оказалась бесполезной :)