2013-10-31 64 views
1

我正在嘗試使用WebClient查詢一些URL。遠程服務器(403)使用WebClient時出現禁止的錯誤

我有一個集合,我循環獲取QueryString價值,並建立最終的URL,然後將其傳遞給客戶端。

的第一次它被執行很好,我得到正確的響應,但是,當它在循環第二次,我得到的錯誤:

System.Net.WebException --> The remote server returned an error: (403) Forbidden.

如果我得到了第一次響應。然後,我應該得到休息的收藏。

任何線索爲什麼?我可能會錯過什麼?

下面是我正在使用的代碼片段。

using(System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\sample.text")) { 
    foreach(var f in fileCollections) { 
     strFinalURL = string.Empty; 

     strFinalURL = "someURL" + f; // f can be considered as querystring param value 

     try { 
      using(var client = new WebClient()) { 

       test = client.DownloadString(strFinalURL); 
       if (!test.Contains("somecondition")) { 
        file.WriteLine(""); 
       } 
      } 
     } catch (System.Exception ex) { 
      Console.WriteLine(ex.Message); 
     } 
    } 
} 
+0

來自同一個域的所有網址是?返回403的URL是否可以通過瀏覽器訪問? –

+0

@codingstill是的,所有的URL都來自同一個域,可以通過瀏覽器訪問 – Amit

+3

如果你說的一切都是正確的,那麼我懷疑服務器節流是玩的一部分。如果你放慢策略性地放置一些'Thread.Sleep',會發生什麼? – spender

回答

1

如果你所說的一切都是正確的,那麼我懷疑服務器節流是玩的一部分。嘗試在你的循環中添加一個Thread.Sleep以減慢速度。

12

某些Web服務器可以基於它們提供的用戶代理字符串來阻止請求。在你的情況下,你發送一個空字符串作爲用戶代理。嘗試添加瀏覽器的用戶代理,任何瀏覽器都可以。

例如:

client.Headers.Add("user-agent", " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0"); 

對於用戶代理的列表,您可以點擊here

+1

這固定它給我,永遠不會想到這一點! – Simon

相關問題