2011-11-12 44 views
3

我在查詢維基百科使用下面的代碼,但我總是得到一個錯誤(403禁止)。但是,當我在瀏覽器中輸入完全相同的網址時,它可以正常工作。我之前一直在使用相同的代碼來查詢其他web apis,所以我不確定是什麼導致了這個問題。維基百科查詢返回錯誤403

private static string query(string text) 
    { 
     text = text.Replace(" ", "%20"); 

     string url = "http://en.wikipedia.org/w/api.php?action=opensearch&search=" + text + "&format=json&callback=spellcheck"; 

     WebClient client = new WebClient(); 
     client.Headers.Add("User-Agent", "whatever"); // <-- this line was missing 

     try 
     { 
      string response = client.DownloadString(url); 
      return response; 
     } 
     catch(Exception e) 
     { 
      Console.WriteLine(e.Message); 
      return null; 
     } 
    } 

回答

5

嘗試將user agent header的東西,你的瀏覽器相匹配。如果這不起作用,請啓動Fiddler,查看瀏覽器標題並將它們複製到您的Web請求。

http://msdn.microsoft.com/en-us/library/system.net.webclient.headers.aspx

編輯

我給的建議是通用的。請注意您是從下載網站的政策,欺騙瀏覽器的用戶代理可能違反政策或默認被視爲惡意:

http://meta.wikimedia.org/wiki/User-Agent_policy

不要複製瀏覽器的用戶代理爲你bot,因爲瀏覽器用戶代理的bot類行爲將被視爲惡意行爲。

+1

這是用戶代理標題。 –

+0

@spender api在頭文件中需要這些信息的目的是什麼?僅用於統計目的還是有時需要根據客戶端的用戶代理髮送不同的響應? – Pedro

+2

http://meta.wikimedia.org/wiki/User-Agent_policy – jpatokal