2012-10-22 15 views
9

tôi sử dụng đoạn mã sau để obtaing dữ liệu html từ internet:lỗi WebProxy: Proxy Xác thực buộc

WebProxy p = new WebProxy("localproxyIP:8080", true); 
p.Credentials = new NetworkCredential("domain\\user", "password"); 
WebRequest.DefaultWebProxy = p; 
WebClient client = new WebClient(); 
string downloadString = client.DownloadString("http://www.google.com"); 

Nhưng các lỗi sau được xuất hiện: "Xác thực buộc Proxy". Tôi không thể sử dụng proxy mặc định vì mã của tôi chạy từ dịch vụ cửa sổ trong tài khoản đặc biệt mà không có cài đặt proxy mặc định cho. Vì vậy, tôi muốn specidy tất cả các thiết lập proxy trong mã của tôi. Vui lòng tư vấn cho tôi cách giải quyết lỗi này.

+1

cố gắng để loại bỏ các tên miền \ \ part (cũng nhớ về việc gói 'WebClient' với câu lệnh' using() 'vì nó thực hiện' IDisposable') – jwaliszko

Trả lời

18

Bạn đã thiết lập các tài sản WebClient.Proxy ..

WebProxy p = new WebProxy("localproxyIP:8080", true); 
p.Credentials = new NetworkCredential("domain\\user", "password"); 
WebRequest.DefaultWebProxy = p; 
WebClient client = new WebClient(); 
**client.Proxy = p;** 
string downloadString = client.DownloadString("http://www.google.com"); 
+0

nó không cần thiết vì 'WebRe quest.DefaultWebProxy = p' là đủ – jwaliszko

+0

bạn nói đúng nếu bạn sử dụng WebRequest.Create() và sau khi bạn gọi WebRequest.GetResponse(). Nhưng trong trường hợp này, anh ta sử dụng WebClient để thực hiện yêu cầu để Proxy không giống nhau. – 2GDev

+2

Phương thức 'DownloadString' thực tế sử dụng đối tượng' WebRequest' được tạo bởi 'WebRequest.Create()'. Nếu proxy không được đặt đặc biệt thành đối tượng 'WebClient', thì đối tượng' WebRequest' đó sử dụng proxy thu được từ thuộc tính 'WebRequest.InternalDefaultWebProxy', được chỉ định bởi câu lệnh' WebRequest.DefaultWebProxy = p'; – jwaliszko

1

Hãy thử mã này

var transferProxy = new WebProxy("localproxyIP:8080", true); 
transferProxy.Credentials = new NetworkCredential("user", "password", "domain"); 
var transferRequest = WebRequest.Create("http://www.google.com"); 
transferRequest.Proxy = transferProxy; 
HttpWebResponse transferResponse = 
    (HttpWebResponse)transferRequest.GetResponse(); 
System.IO.Stream outputStream = transferResponse.GetResponseStream(); 
39

này đã làm việc cho tôi:

IWebProxy defaultWebProxy = WebRequest.DefaultWebProxy; 
defaultWebProxy.Credentials = CredentialCache.DefaultCredentials; 
client = new WebClient 
    { 
     Proxy = defaultWebProxy 
    }; 
string downloadString = client.DownloadString(...); 
+3

Tuyệt vời! Đây là một phần của mọi mẫu WebClient. –