C#Mono - 错误:SecureChannelFailure - 某些域的HTTPS请求失败

时间:2017-07-02 23:53:43

标签: c# https mono webclient

在阅读了有关此问题的所有问题后的几小时内,我别无选择,只能自己发帖。 我有一个非常简单的C#代码,它从URL返回HTML代码:

string url = "https://www.google.fr";
var encoding = Encoding.GetEncoding("iso-8859-1");
using (WebClient client = new WebClient())
{
     string html = new StreamReader(client.OpenRead(url), encoding).ReadToEnd();
     Console.Write(html);
}

在大多数情况下,除了导致异常的某些域外,此程序返回结果:

 Mono.Security.Protocol.Tls.TlsException: The authentication or decryption has failed.

我尝试了其他问题,但没有人可以解决我的问题。我已经尝试过这样覆盖:

 ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };

问题来自Mono,因为无法在Mono上运行的域在Windows 10上正常运行。 如何避免此异常?

1 个答案:

答案 0 :(得分:0)

通过搜索解决方案几天和几天后,我明白我必须使用一个技巧,因为错误来自Mono。

这不是正确的方法,但最简单。

我使用免费域名来托管包含此文件的php文件 domain.com/myfile.php

<?php echo file_get_contents("url of the website"); ?>

然后,我没有使用导致问题的url,而是使用C#中的PHP文件链接替换。

string url = "domain.com/myfile.php";
using (WebClient client = new WebClient())
{
    string html = client.DownloadString(url);
    lines = Regex.Split(html, @"\r?\n|\r");
    client.Dispose();
}