2014-05-11 24 views
6

Tôi sử dụng mã này với .NET 3.5 và lỗi nhận được "Máy chủ từ xa trả về lỗi: (407) Yêu cầu xác thực proxy".Máy chủ từ xa trả về lỗi: (407) Yêu cầu xác thực proxy

using (WebClient client = new WebClient()) 
{ 
    WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials; 

    try 
    { 
     string webPageStr = client.DownloadString(URL); 
     Console.WriteLine("OK"); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("FAIL"); 
     Console.WriteLine(ex.Message); 
    } 
} 

Tuy nhiên, mã này hoạt động trơn tru với .NET 4.0 vì dòng này đủ để vượt qua xác thực proxy khi không dùng .NET 3.5.

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials; 

Vì vậy, tôi đã cố gắng rất nhiều cách khác để giải quyết vấn đề này nhưng không ai trong số họ hoạt động:

1) Thay thế CredentialCache.DefaultCredentials phù hợp với

WebRequest.DefaultWebProxy.Credentials = new NetworkCredential(user, password, domain); 

2) Tạo đối tượng proxy mới

IWebProxy proxy = new WebProxy(proxyUrl, port); 
proxy.Credentials = new NetworkCredential(user, pass, domain); 
client.Proxy = proxy; 
client.Credentials = new NetworkCredential(user, pass, domain); 

3) Thêm dòng này

client.UseDefaultCredentials = true; 

4) Sử dụng HttpWebRequest thay vì WebClient và lặp lại mọi quy trình ở trên. Đây là mã mẫu.

HttpWebRequest webRequest = WebRequest.Create(URL) as HttpWebRequest; 
webRequest.Proxy = WebRequest.DefaultWebProxy; 
webRequest.Credentials = new NetworkCredential(user, pass, domain); 
webRequest.Proxy.Credentials = new NetworkCredential(user, pass, domain); 

try 
{ 
    webRequest.GetResponse(); 
    Console.WriteLine("OK"); 
} 
catch (Exception ex) 
{ 
    Console.WriteLine("FAIL"); 
    Console.WriteLine(ex.Message); 
} 

Tôi cảm thấy như mình sắp chết khi sử dụng .NET 3.5. Phải có sự khác biệt giữa hai phiên bản .NET mà tôi không biết. Cảm ơn bạn rất nhiều trước.

+0

Bao giờ tìm được giải pháp 3.5? Tôi đang chạy vào cùng một điều, 4,0 cập nhật trông giống như lựa chọn duy nhất. –

Trả lời

10

Chỉ cần thêm này để cấu hình

<system.net> 
     <defaultProxy useDefaultCredentials="true" > 
     </defaultProxy> 
    </system.net> 
0

Tôi đã có vấn đề này với giải pháp Visual Studio trước. Điều này đã giúp tôi:

Mở IE. Đi đến Công cụ -> Tùy chọn Internet. Nhấp vào tab Kết nối, sau đó nhấp vào nút Cài đặt LAN. Bỏ chọn "Tự động phát hiện cài đặt".

Các vấn đề liên quan