我是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个小时的所有解决方案后,都没有效果,我需要帮助。非常感谢
微软.NET框架4.7.03062SP1版本
在Microsoft Visual Studio 2010和2019版本16.4.3上也有相同的错误
发布于 2020-09-11 01:50:45
引言
.NET框架库似乎不支持https://www.rtvs.sk/服务器使用非标准的通信方式。
服务器将任何HTTP连接重定向到HTTPS连接,这是无法避免的。
我并不是说使用WebRequest.Create而不是WebClient。错误仍然存在,因为这是我在应用程序中使用的代码。
备用客户端有几个可能的选项:
对我简单的个人应用程序来说太多了。
我的解决方案
经过简单的测试,我发现使用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)一种简单的方法是将文件添加到项目中,并选择"Copy to output directory“选项以"Copy if newer”。
目前的简单解决方案是代码不处理任何错误。我把那部分留给你了。
我也尝试使用IronPython,但我编写的简单客户端无法工作,因为缺少一个库。它可能无法工作,因为它使用.NET框架库作为解释器。
https://stackoverflow.com/questions/63651372
复制相似问题