当我尝试从morizon.pl下载源页面时遇到问题:
WebClient webClient = new WebClient();
try
{
string str = webClient.DownloadString("https://www.morizon.pl/");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
我检查了stackoverflow中的类似问题,并编辑了我的代码,但还是一无所获,我被这个问题所困扰。
public class CookieAwareWebClient : WebClient
{
public CookieContainer CookieContainer { get; set; }
public CookieAwareWebClient()
: this(new CookieContainer())
{ }
public CookieAwareWebClient(CookieContainer c)
{
this.CookieContainer = c;
}
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
var castRequest = request as HttpWebRequest;
if (castRequest != null)
{
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.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36";
castRequest.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
castRequest.Headers.Add("Accept-Language", "en-GB,en-US;q=0.8,en;q=0.6");
castRequest.KeepAlive = false;
castRequest.ProtocolVersion = HttpVersion.Version10;
castRequest.ServicePoint.ConnectionLimit = 1;
castRequest.CookieContainer = this.CookieContainer;
}
return request;
}
}
例如google.com,我可以使用我的函数进行下载,但morizon.pl我不能。
答案 0 :(得分:2)
从.NET Framework 4.0开始,默认安全协议为TLS 1.0
和SSL 3.0
。
在您的应用程序中,您可能需要启用TLS 1.1
和/或TLS 1.2
。
System.Net.ServicePointManager.SecurityProtocol |=
SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
using (WebClient webClient = new WebClient())
{
string str = webClient.DownloadString("https://www.morizon.pl/");
}
此stackoverflow post中的更多详细信息。