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.
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. –