2009-03-31 3 views
7

Mã sau không thành công với 400 ngoại lệ yêu cầu không hợp lệ. Kết nối mạng của tôi là tốt và tôi có thể đi đến trang web nhưng tôi không thể có được uri này với HttpWebRequest.Tại sao HttpWebRequest của tôi trả về 400 yêu cầu không hợp lệ?

private void button3_Click(object sender, EventArgs e) 
{ 
    WebRequest req = HttpWebRequest.Create(@"http://www.youtube.com/"); 
    try 
    { 
     //returns a 400 bad request... Any ideas??? 
     WebResponse response = req.GetResponse(); 
    } 
    catch (WebException ex) 
    { 
     Log(ex.Message);     
    } 
} 
+0

là nó asp.net hoặc cửa sổ hình thức? – eglasius

Trả lời

13

Thứ nhất, đúc các WebRequest để một HttpWebRequest như thế này:

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(@"http://www.youtube.com/"); 

Sau đó, thêm dòng mã này:

req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; 
+0

Điều này hoạt động giống như một nhà vô địch! – user74373

3

Có thể bạn đã chạy máy chủ proxy và chưa thiết lập thuộc tính Proxy của HttpWebRequest?

+0

Đoán tốt. Đây là nội bộ của proxy tôi đang viết. – user74373

4

Có thể có nhiều nguyên nhân gây ra sự cố này. Bạn có thêm chi tiết nào về WebException không?

Một nguyên nhân mà tôi đã gặp phải trước đây là bạn có chuỗi tác nhân người dùng xấu. Một số trang web (ví dụ: google) kiểm tra rằng các yêu cầu đến từ các tác nhân người dùng đã biết để ngăn rô bốt tự động truy cập các trang của họ.

Thực tế, bạn có thể muốn kiểm tra xem thỏa thuận người dùng dành cho YouTube không ngăn cản bạn thực hiện những gì bạn đang làm. Nếu có, thì những gì bạn đang làm có thể được thực hiện tốt hơn bằng cách đi qua các kênh được phê duyệt như dịch vụ web.

5

Đặt UserAgentReferer trong bạn HttpWebRequest :

var request = (HttpWebRequest)WebRequest.Create(@"http://www.youtube.com/"); 
request.Referer = "http://www.youtube.com/"; // optional 
request.UserAgent = 
    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; " + 
    "Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; " + 
    ".NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; " + 
    "InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)"; 
try 
{ 
    var response = (HttpWebResponse)request.GetResponse(); 
    using (var reader = new StreamReader(response.GetResponseStream())) 
    { 
     var html = reader.ReadToEnd(); 
    } 
} 
catch (WebException ex) 
{ 
    Log(ex); 
} 
+0

Tôi đề nghị anh ta sử dụng Debug.WriteLine (ex.ToString()), vì vậy anh ta nhận được toàn bộ ngoại lệ, không chỉ là thông báo. –

+0

@ John, điều đó tạo nên sự sence –