首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法创建SSL/TLS安全通道"http://www.rtvs.sk/televizia/archiv“

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

Stack Overflow用户
提问于 2020-08-30 04:11:34
回答 1查看 77关注 0票数 1

我是ssl/tls的新手,所以请耐心等待。代码适用于我几个月的时间,适用于其他网站(例如iprima.cz),但不适用于rtvs.sk。它写道:无法创建SSL/TLS安全通道。我什么都试过了,但都不管用。请帮帮我。

代码语言:javascript
复制
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个小时的所有解决方案后,都没有效果,我需要帮助。非常感谢

微软.NET框架4.7.03062SP1版本

在Microsoft Visual Studio 2010和2019版本16.4.3上也有相同的错误

EN

回答 1

Stack Overflow用户

发布于 2020-09-11 01:50:45

引言

.NET框架库似乎不支持https://www.rtvs.sk/服务器使用非标准的通信方式。

服务器将任何HTTP连接重定向到HTTPS连接,这是无法避免的。

我并不是说使用WebRequest.Create而不是WebClient。错误仍然存在,因为这是我在应用程序中使用的代码。

备用客户端有几个可能的选项:

  1. 从头开始编写您自己的客户端-我不推荐此解决方案,它很难,容易出错...

对我简单的个人应用程序来说太多了。

  1. 尝试使用Linux (或Mono框架)上的应用程序。

我的解决方案

经过简单的测试,我发现使用Python下载是没有问题的。因此,我制作了一个简单的Python下载器,并在我的C#应用程序中使用它。

C#中的代码是:

代码语言:javascript
复制
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“文件)中的代码是:

代码语言:javascript
复制
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)

一种简单的方法是将文件添加到项目中,并选择"Copy to output directory“选项以"Copy if newer”。

目前的简单解决方案是代码不处理任何错误。我把那部分留给你了。

我也尝试使用IronPython,但我编写的简单客户端无法工作,因为缺少一个库。它可能无法工作,因为它使用.NET框架库作为解释器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63651372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档