惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
F
Fortinet All Blogs
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
爱范儿
爱范儿
美团技术团队
H
Hackread – Cybersecurity News, Data Breaches, AI and More
有赞技术团队
有赞技术团队
博客园_首页
T
The Blog of Author Tim Ferriss
T
Tailwind CSS Blog
V
Visual Studio Blog
Jina AI
Jina AI
博客园 - Franky
量子位
MongoDB | Blog
MongoDB | Blog
L
LangChain Blog
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
aimingoo的专栏
aimingoo的专栏
M
MIT News - Artificial intelligence

博客园 - 花生!~~

[技术分享] 谈谈网页数据采集中的“结构化”难题:从手动 XPath 到智能识别算法的演进 微信历史版本下archive Cefsharp开发相关注意 .net PostgreSQL 相关 .net4.0 请求HTTPS出错:未能创建 SSL/TLS 安全通道 c#中的gcAllowVeryLargeObjects和OutOfMemoryException XML hexadecimal value 0x__, is an invalid character 创建窗口句柄时出错(error creating window handle) .net程序和管理员权限的一些事 - 花生!~~ - 博客园 .net下WinDbg使用说明 在.net中修改Webbrowser控件的IE版本 System.Data.SQLite安装的相关问题 TextBox Ctrl+A不能全选的问题 HttpWebRequest 跳转后(301,302)ResponseUri乱码问题 如何用c#本地代码实现与Webbrowser中的JavaScript交互 在sqlite中,如何删除字段? how to drop a column in sqlite 如何在centos下配置redis开机自启动 WinForm中的图表控件Chart XPath高级用法(冰山一角)
windows10 .NET http请求 tls1.3问题
花生!~~ · 2025-03-25 · via 博客园 - 花生!~~

目标网站

https://www.szzy.edu.cn/

问题描述及尝试

  1. 使用.net(任何版本,http无法请求,异常:
    The SSL connection could not be established, see inner exception.
    因为算法不同,客户端和服务器无法通信。
    使用下面代码同样无效
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13;

  2. 使用浏览器打开,开启Fiddler后,显示连接被重置,无法打开。log:
    HTTPS handshake to www.szzy.edu.cn (for #84) failed. System.Security.Authentication.AuthenticationException 调用 SSPI 失败,请参见内部

  3. 使用 C:\Windows\System32\curl.exe 无法请求

  4. 使用C:\Program Files\Git\mingw64\bin\curl.exe 请求成功。

StackOverflow上的信息

因为 TLS 1.3 客户端仅在 Windows 11/Server 2022 上受支持,所以您遇到的是操作系统级别的错误。
最有可能的是,您的机器正在发送 TLS 握手,指定它支持的最大 TLS 版本是 1.2,但在这里失败,因为服务器需要 1.3,所以您得到“HandshakeFailure”。

解决方法

使用curlsharp,从 https://curl.se/windows/下载 libcurl.dll、curl-ca-bundle.crt 复制到根目录,目前仅测试用32位成功
注意:要指定证书 easy.CaInfo = "curl-ca-bundle.crt";
参考代码

using System;
using System.Linq;
using System.Text;
using CurlSharp;

namespace EasyGet
{
    internal class EasyGet
    {
        public static void Main(String[] args)
        {
            try
            {
                Curl.GlobalInit(CurlInitFlag.All);

                using (var easy = new CurlEasy())
                {
                    easy.Url = "https://www.szzy.edu.cn/1359/list.aspx";
                    easy.WriteData = null;
                    easy.WriteFunction = OnWriteData;
                    //easy.ProgressFunction = OnProgressData;
                easy.CaInfo = "curl-ca-bundle.crt";
                    var code=easy.Perform();

                    Console.WriteLine(code);
                     
                }

                Curl.GlobalCleanup();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                Console.ReadLine();
            }
        }

        public static Int32 OnWriteData(Byte[] buf, Int32 size, Int32 nmemb, Object extraData)
        {
            //var userData = (string)extraData;
            Console.Write(Encoding.UTF8.GetString(buf));
            return size * nmemb;
        }

        public static int OnProgressData(Object extraData, double dlTotal, double dlNow, double ulTotal, double ulNow)
        {
            Console.WriteLine("{0} / {1}", dlNow, dlTotal);
            return 0;
        }
    }
}