无法从传输连接中读取数据:远程主机强制关闭了一个现有的连接。

4

当我尝试从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。
2个回答

6
从.NET Framework 4.0开始,默认的安全协议是 TLS 1.0SSL 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帖子


非常感谢!现在我可以下载我在项目中使用的源代码。我之前使用的是.NET Framework 4.0,但现在我已经升级到了4.5,并且它可以正常工作了。 - Mat

-1
如果以上方法不起作用,您可以尝试设置用户代理头:

wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接