2012-04-11 34 views
6

Tôi đang sử dụng HttpWebRequest và tôi gặp lỗi khi thực hiện GetResponse().Lỗi HttpWebRequest: 503 máy chủ không khả dụng

tôi sử dụng mã này:

private void button1_Click(object sender, EventArgs e) 
    { 
     Uri myUri = new Uri("http://www.google.com/sorry/?continue=http://www.google.com/search%3Fq%3Dyamaha"); 
     // Create a 'HttpWebRequest' object for the specified url. 
     HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(myUri); 
     // Set the user agent as if we were a web browser 
     myHttpWebRequest.UserAgent = @"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4"; 

     HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
     var stream = myHttpWebResponse.GetResponseStream(); 
     var reader = new StreamReader(stream); 
     var html = reader.ReadToEnd(); 
     // Release resources of response object. 
     myHttpWebResponse.Close(); 

     textBox1.Text = html; 
    } 
+0

Em bắt được lỗi tương tự khi yêu cầu URL trong một trình duyệt hoặc một công cụ như curl? – jlafay

+1

Điều đó có vẻ giống như một URL rất lạ để tìm nạp theo chương trình. Có lý do gì không? –

+1

http://www.google.com/sorry/ trả về 503. Nếu bạn đang cố gắng tự động hóa một số lượng lớn truy vấn tới Google, bạn có thể nhận được URL đó. Nhưng như Jon Skeet đã hỏi, tại sao bạn gửi yêu cầu tới URL đó ngay từ đầu? Xem http://support.google.com/websearch/bin/answer.py?hl=vi&answer=86640 –

Trả lời

11

Máy chủ thực sự trả về một mã trạng thái 503 HTTP. Tuy nhiên, nó cũng trả về một nội dung phản hồi cùng với điều kiện lỗi 503 (nội dung bạn thấy trong trình duyệt nếu bạn mở URL đó).

Bạn có quyền truy cập vào phản hồi trong thuộc tính Response của ngoại lệ (trong trường hợp có phản hồi 503, ngoại lệ được nêu là WebException, có tài sản Response). bạn cần để bắt ngoại lệ này và xử lý nó đúng

Cụ thể, mã của bạn có thể trông như thế này:

string html; 

try 
{ 
    var myUri = new Uri("http://www.google.com/sorry/?continue=http://www.google.com/search%3Fq%3Dyamaha"); 
    // Create a 'HttpWebRequest' object for the specified url. 
    var myHttpWebRequest = (HttpWebRequest)WebRequest.Create(myUri); 
    // Set the user agent as if we were a web browser 
    myHttpWebRequest.UserAgent = @"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4"; 

    var myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
    var stream = myHttpWebResponse.GetResponseStream(); 
    var reader = new StreamReader(stream); 
    html = reader.ReadToEnd(); 
    // Release resources of response object. 
    myHttpWebResponse.Close(); 
} 
catch (WebException ex) 
{ 
    using(var sr = new StreamReader(ex.Response.GetResponseStream())) 
     html = sr.ReadToEnd(); 
} 

textBox1.Text = html; 
+0

mã này hoạt động .. cảm ơn bạn rất nhiều –

+1

@Ainun Nuha Tôi đang cố gắng dịch văn bản từ Thái Lan sang tiếng Anh nhưng tôi đang đối mặt với vấn đề tương tự. Tôi nhận ngoại lệ tại GetResponse() đang được nắm bắt trong khối catch(). Nhưng nó gửi HTML của trang hoàn chỉnh với nội dung "Web Page Blocked". Làm thế nào tôi có thể nhận được chuỗi dịch sang tiếng Anh. – RSB

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