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請求更像瀏覽器的網站?