gpt4 book ai didi

c# - 无法创建 SSL/TLS 安全通道 "http://www.rtvs.sk/televizia/archiv"

转载 作者:行者123 更新时间:2023-12-04 22:43:06 25 4
gpt4 key购买 nike

我对 ssl/tls 很陌生,所以请耐心等待。该代码适用于我几个月的其他网站(例如 iprima.cz),但不适用于 rtvs.sk。
它写道:无法创建 SSL/TLS 安全通道。
我已经尝试了一切,但没有任何效果。请帮我。

string url1 = "https://www.rtvs.sk/televizia/archiv";
ServicePointManager.SecurityProtocol = (SecurityProtocolType)(0xc0 | 0x300 | 0xc00);
ServicePointManager.Expect100Continue = true;
ServicePointManager.DefaultConnectionLimit = 9999;
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true;
//It is because I have tried enerything
string rets = "";
using (WebClient wc = new WebClient())
{
wc.Proxy = null;

int i = 0;
zatry:

try
{
Stream stream = wc.OpenRead(url1);
Encoding kod = Encoding.UTF8;
StreamReader sr = new StreamReader(stream, kod);
rets = sr.ReadToEnd();
sr.Close();
}
在我看来,它是特定于站点的,它适用于 Opera 和其他浏览器,但不适用于我的代码。
这可能是一件简单的事情,但在审查了所有解决方案 5 小时后没有任何效果,我需要帮助。非常感谢
Microsoft .NET 框架 4.7.03062SP1Rel
它在 Microsoft Visual Studio 2010 和 2019 版本 16.4.3 上有相同的错误

最佳答案

介绍
好像是 https://www.rtvs.sk/服务器使用非标准的通信方式,.NET Framework 库不支持这种方式。
服务器将任何 HTTP 连接重定向到 HTTPS 连接,这是无法避免的。
要绕过“无法创建 SSL/TLS 安全通道”错误,您需要使用不同的 HTTPS 客户端。我并不是说使用 WebRequest.Create而不是 WebClient .错误仍然存​​在,因为这是我在应用程序中使用的代码。由于即使 Internet Explorer 也无法打开该页面(至少在 Windows 7 中不会),因此通信错误可能在系统更深的地方。
备用客户端有几个可能的选项:

  • 从头开始编写您自己的客户端 - 我不能推荐这个解决方案,它很难,容易出错......
  • 购买现有的替代客户端 - 我只找到了一个用于 C# 的替代 HTTPS 客户端,而且价格很高。对于我简单的个人应用程序来说太多了。
  • 使用替代的外部客户端 - 例如wget ,或其他下载器(自定义和/或现有)。
  • 尝试使用 Linux(或 Mono 框架)中的应用程序。我没有测试这个解决方案,但是(至少理论上)可以通过这种方式解决问题。

  • 我的解决方案
    经过一个简单的测试,我发现使用Python下载是没有问题的。所以我制作了一个简单的 Python 下载器,并在我的 C# 应用程序中使用它。
    C#中的代码是:
    private const string PythonSciptPath = "PythonDownloader.py";

    private static bool UseStandardDownloader(string address) =>
    !address.StartsWith("https://www.rtvs.sk/", StringComparison.Ordinal);

    private static byte[] GetData(string address)
    {
    var start = new ProcessStartInfo
    {
    FileName = "python.exe",
    Arguments = PythonSciptPath + " \"" + address + "\"",
    UseShellExecute = false,
    RedirectStandardOutput = true,
    CreateNoWindow = true
    };

    string result;
    using (Process process = Process.Start(start))
    using (StreamReader reader = process.StandardOutput)
    {
    result = reader.ReadToEnd();
    }

    return Convert.FromBase64String(result);
    }
    Python 中的代码(“PythonDownloader.py”文件)是:
    import base64
    import sys
    import urllib.request

    opener = urllib.request.URLopener()
    stream = opener.open(sys.argv[1])

    while True:
    contentBytes = stream.read(60)
    if len(contentBytes) == 0:
    break

    contentbase64Bytes = base64.b64encode(contentBytes)
    contentString = contentbase64Bytes.decode("UTF-8")
    print(contentString)
    一种简单的处理方法是将文件添加到项目中,然后选择“复制到输出目录”选项到“如果较新则复制”。
    当前的简单解决方案代码不处理任何错误。我把那部分留给你。
    我也尝试使用 IronPython,但我写的简单客户端由于缺少库而无法工作。它可能无法工作,因为它使用 .NET Framework 库作为解释器。

    关于c# - 无法创建 SSL/TLS 安全通道 "http://www.rtvs.sk/televizia/archiv",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63651372/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com