【问题标题】:How to fix "The SSL connection could not be established, see inner exception." when trying to download osu! avatar如何解决“无法建立 SSL 连接,请参阅内部异常。”尝试下载 osu!头像
【发布时间】:2019-01-21 20:43:54
【问题描述】:

我要下载osu!头像使用它们,但不断收到此错误:

无法建立 SSL 连接。

内部异常是:

System.Net.Http.HttpRequestException:无法建立 SSL 连接,请参阅内部异常。 ---> System.Security.Authentication.AuthenticationException:身份验证失败,请参阅内部异常。 ---> System.ComponentModel.Win32Exception: Получено непредвиденное сообщение или оно имеет неправильный формат

示例网址: https://a.ppy.sh/10638551?1524507784.png

我尝试使用 HttpClient 和 WebClient 但没有任何成功。

using(HttpClient client = new HttpClient())
{
     var resp = await client.GetAsync("https://a.ppy.sh/10638551?1547998515.jpeg");
     var responseStr = await resp.Content.ReadAsStringAsync();
     File.WriteAllText("html/avatars/avatar.jpeg", responseStr);
}

【问题讨论】:

  • 请向我们展示您的代码。没有它,我们无法为您提供帮助。
  • 好的。所以它告诉你查看内部异常。它是什么?此外,正如 Amy 所说,在询问有关非工作代码的问题时,您需要提供代码。请Edit您的问题并仅包含相关代码和内部异常。
  • 内部异常是俄语,翻译为“收到意外消息或格式不正确”
  • 您使用的是 .NET Core 还是 .NET Framework?这看起来无法建立 SSL 连接,因此可能是密码问题。确保您的 HttpClient 支持适当版本的 SSL。另外,题外话,但通常您不会将 JPEG(或任何二进制数据)作为字符串读取。

标签: c# .net ssl avatar


【解决方案1】:

我找到了这个博客帮助我的解决方案

ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, errors) =>
{
    // local dev, just approve all certs
    if (development) return true;
    return errors == SslPolicyErrors.None ;
};

https://www.khalidabuhakmeh.com/validate-ssl-certificate-with-servicepointmanager

【讨论】:

  • 小心,这种代码会在你不知不觉中泄露到生产环境中
  • 此解决方案适用于 HttpWebRequest、HttpWebResponse 和 WebClient,而不仅仅适用于 HttpClient。只需保留返回 true 并删除其他所有内容。赞一个!
【解决方案2】:

在使用 HttpClient 之前你应该设置 HttpClientHandler;

var handler = new HttpClientHandler();

handler.ServerCertificateCustomValidationCallback += 
                (sender, certificate, chain, errors) =>
                {
                    return true;
                };

仅比您的 HttpClient 代码。 必须适用于 .net Core 3。*

【讨论】:

  • 确认 - 小心。使用 x590 证书是有原因的。
【解决方案3】:

我相信我们可能已经解决了这个确切的问题(或一个非常相似的问题)

在我们的例子中,我们遇到了同样的异常,但奇怪的是只有一台机器。

经过一番调查,我们使用此软件 (https://www.nartac.com/Products/IISCrypto/Download) 确定 我们的盒子与我们尝试联系的盒子之间没有共享密码套件

我们使用该软件在我们的盒子上启用了支持的套件并重新启动。

一旦备份并运行,一切正常。

最终这是机器配置问题,而不是编码问题。

[注意:我与该软件或它的公司无关,我确信可以使用其他方法来实现这一点,但我知道这对我们有用]

【讨论】:

    【解决方案4】:

    答案:


    一段时间后,我发现我使用的库有点糟糕。之后我发现了Selenium

    考虑到这一点,我开始使用 Selenium WebDriver,并认为我可以截取我需要的页面,然后我裁剪了该图像并得到了我需要的内容。
    所以没有必要继续这个问题。

    【讨论】:

    • 使用这种方式不能解决问题。
    • 查看link
    猜你喜欢
    • 2019-06-29
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 2020-06-25
    • 2019-12-29
    • 1970-01-01
    • 2022-08-31
    相关资源
    最近更新 更多