簡體   English   中英

C# 中的代理基本身份驗證:HTTP 407 錯誤

[英]Proxy Basic Authentication in C#: HTTP 407 error

我正在使用需要身份驗證的代理,即在瀏覽器中,如果我嘗試打開一個頁面,它會立即要求提供憑據。 我在我的程序中提供了相同的憑據,但它因 HTTP 407 錯誤而失敗。

這是我的代碼:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);

IWebProxy proxy = WebRequest.GetSystemWebProxy();
CredentialCache cc = new CredentialCache();
NetworkCredential nc = new NetworkCredential();

nc.UserName = "userName";
nc.Password = "password";
nc.Domain = "mydomain";
cc.Add("http://20.154.23.100", 8888, "Basic", nc);
proxy.Credentials = cc;
//proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
request.Proxy = proxy;
request.Proxy.Credentials = cc;
request.Credentials = cc;
request.PreAuthenticate = true;

我已經嘗試了所有可能的事情,但似乎我錯過了一些東西。 是不是我必須提出兩個請求? 首先沒有憑據,一旦我從服務器聽到需要憑據的消息,就用憑據發出相同的請求?

這種方法可以避免對可能需要的硬編碼或配置代理憑證的需要。

把它放在你的應用程序配置文件中——可能是 app.config。 Visual Studio 將在構建時將其重命名為 yourappname.exe.config,它會在您的可執行文件旁邊結束。 如果您沒有應用程序配置文件,只需使用 Visual Studio 中的添加新項添加一個。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.net>
    <defaultProxy useDefaultCredentials="true" />
  </system.net>
</configuration>

我遇到了一個非常相似的情況,默認情況下 HttpWebRequest 沒有獲取正確的代理詳細信息,並且設置 UseDefaultCredentials 也不起作用。 然而,在代碼中強制設置是一種享受:

IWebProxy proxy = myWebRequest.Proxy;
if (proxy != null) {
    string proxyuri = proxy.GetProxy(myWebRequest.RequestUri).ToString();
    myWebRequest.UseDefaultCredentials = true;
    myWebRequest.Proxy = new WebProxy(proxyuri, false);
    myWebRequest.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
}

並且由於它使用默認憑據,因此不應詢問用戶的詳細信息。

這是使用代理和信用的正確方法..

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);

IWebProxy proxy = request.Proxy;                    
if (proxy != null)
{
    Console.WriteLine("Proxy: {0}", proxy.GetProxy(request.RequestUri));
}
else
{
    Console.WriteLine("Proxy is null; no proxy will be used");
}

WebProxy myProxy = new WebProxy();
Uri newUri = new Uri("http://20.154.23.100:8888");
// Associate the newUri object to 'myProxy' object so that new myProxy settings can be set.
myProxy.Address = newUri;
// Create a NetworkCredential object and associate it with the 
// Proxy property of request object.
myProxy.Credentials = new NetworkCredential("userName", "password");
request.Proxy = myProxy;

謝謝大家的幫助... :)

這個問題多年來一直困擾着我,對我來說唯一的解決方法是要求我們的網絡團隊在我們的防火牆上設置例外,以便某些 URL 請求不需要在不理想的代理上進行身份驗證。

最近我將項目從 3.5 升級到 .NET 4,代碼剛剛開始使用代理的默認憑據工作,沒有對憑據進行硬編碼等。

request.Proxy.Credentials = CredentialCache.DefaultCredentials;

由於受密碼保護的代理服務器,我遇到了類似的問題,並且在那里找不到太多信息 - 希望這對某人有所幫助。 我想獲取客戶瀏覽器使用的憑據。 但是,當代理擁有自己的用戶名和密碼時,CredentialCache.DefaultCredentials 和 DefaultNetworkCredentials 不起作用,即使我輸入了這些詳細信息以確保 Internet Explorer 和 Edge 可以訪問。

最后我的解決方案是使用一個名為“CredentialManagement.Standard”的nuget包和以下代碼:

using WebClient webClient = new WebClient();    
var request = WebRequest.Create("http://google.co.uk");
var proxy = request.Proxy.GetProxy(new Uri("http://google.co.uk"));

var cmgr = new CredentialManagement.Credential() { Target = proxy.Host };
if (cmgr.Load())
{
    var credentials = new NetworkCredential(cmgr.Username, cmgr.Password);
    webClient.Proxy.Credentials = credentials;
    webClient.Credentials = credentials;
}

這會從“憑據管理器”中獲取憑據——可以通過 Windows 找到——單擊“開始”,然后搜索“憑據管理器”。 在瀏覽器提示時手動輸入的代理憑據將位於 Windows 憑據部分。

你可以這樣使用,它有效!

        WebProxy proxy = new WebProxy
        {
            Address = new Uri(""),
            Credentials = new NetworkCredential("", "")
        };

        HttpClientHandler httpClientHandler = new HttpClientHandler
        {
            Proxy = proxy,
            UseProxy = true
        };

        HttpClient client = new HttpClient(httpClientHandler);

        HttpResponseMessage response = await client.PostAsync("...");

試試這個

        var YourURL = "http://yourUrl/";

         HttpClientHandler handler = new HttpClientHandler() 
         { 
             Proxy = new WebProxy("http://127.0.0.1:8888"), 
             UseProxy = true, 
         }; 

         Console.WriteLine(YourURL); 

         HttpClient client = new HttpClient(handler); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM