我在本地网络上有一个我试图为小客户端写的网站。
我试图为此目的使用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 Control,我还可以使用WebClient访问其他网站,而无需任何问题。
有什么具体的,为什么我无法使用WebClient访问此类网站?
是否还有其他帮助WebClient请求看起来更像网站的浏览器?
我已经弄清楚我的方向错误。
似乎有问题的网站不支持默认安全性,因此我必须启用TLS12:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
由于某种原因,它与我正在解析的另一个本地网站引起了同样的问题,我通过启用所有TLS版本来解决该问题:
ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12;