2012-04-11 161 views
6

我正在使用HttpWebRequest,並且在執行GetResponse()時出現錯誤。HttpWebRequest錯誤:503服務器不可用

我使用此代碼:

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

你得到同樣的錯誤,要求在瀏覽器的URL或像curl這樣的工具是什麼時候? – jlafay 2012-04-11 13:51:57

+1

這看起來像一個絕對奇怪的URL以編程方式獲取。任何理由嗎? – 2012-04-11 13:52:04

+1

http://www.google.com/sorry/返回503.如果您嘗試自動化大量的Google查詢,則可能會獲得該網址。但正如Jon Skeet所問,爲什麼你首先向這個URL提交請求?請參閱http://support.google.com/websearch/bin/answer.py?hl=zh-CN&answer=86640 – 2012-04-11 13:53:16

回答

11

服務器確實返回503 HTTP狀態代碼。但是,它也會返回一個響應主體以及503錯誤條件(如果您打開該URL,則在瀏覽器中看到的內容)。

您可以訪問異常的Response屬性中的響應(如果有503響應,則引發的異常是WebException,它具有Response屬性)。你需要抓住這個異常,並具體妥善處理

,你的代碼看起來是這樣的:

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

此代碼工作..非常感謝你 – 2012-04-12 12:22:12

+1

@Ainun Nuha我正在嘗試將文本從泰國翻譯成英文,但我面臨類似的問題。我在catch()塊中捕獲的GetResponse()中得到異常。但它發送的內容爲「Web Page Blocked」的完整頁面的HTML。我怎樣才能將字符串翻譯成英文。 – RSB 2016-09-22 10:55:02

相關問題