2017-03-16 61 views
0

我在本地網絡上有一個網站,我正在嘗試編寫一個小客戶端。當試圖使用WebClient訪問它時,網站會切斷連接

我想使用WebClient來達到這個目的,但是,似乎網站以某種方式檢測到它,並且不允許繼續切割連接,從而導致WebException。

爲了解決這個問題,我曾嘗試加入標題,如:

 WebClient wc = new WebClient(); 
     wc.Headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"; 
     wc.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml"); 
     wc.Headers.Add("Accept-Encoding", "deflate, sdch, br"); 
     wc.Headers.Add("Accept-Charset", "ISO-8859-1"); 
     wc.Headers.Add("Accept-Language", "en-us;q=0.7,en;q=0.3"); 

然而,該網站還切斷連接,我設法發現,並非所有的頭被送到的話,我試圖重寫WebRequest:

public class MyWebClient : WebClient 
    { 
     protected override WebRequest GetWebRequest(Uri address) 
     { 
      WebRequest request = base.GetWebRequest(address); 
      var castRequest = request as HttpWebRequest; 

      if (castRequest != null) 
      { 
       castRequest.KeepAlive = true; 
       castRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; 
       castRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"; 
       castRequest.Headers.Add("Accept-Encoding", "deflate, sdch, br"); 
       castRequest.Headers.Add("Accept-Charset", "ISO-8859-1"); 
       castRequest.Headers.Add("Accept-Language", "en-US,en;q=0.8"); 
      } 

      return request; 
     } 
    } 

這管理髮送所有的標題,但是,我仍然無法訪問該網站。

我可以使用任何瀏覽器(如Firefox或Chrome)複製頭文件甚至是WebBrowser控件,我也可以使用WebClient訪問其他網站,而且沒有任何問題。

有什麼具體的爲什麼我不能使用WebClient訪問這樣的網站?

還有什麼要讓WebClient請求更像瀏覽器的網站?

回答

0

我發現我正在找錯方向。

看來問題不支持默認SecurityProtocol的網站,所以我不得不啓用TLS12:

 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 

出於某種原因,也造成了同樣的問題與其他地方的網站,我分析,我有通過啓用所有TLS版本解決:

 ServicePointManager.SecurityProtocol = 
            SecurityProtocolType.Tls 
           | SecurityProtocolType.Tls11 
           | SecurityProtocolType.Tls12; 
相關問題