首页 > Web开发 > 详细

.NET5 自定义HttpClient中https协议请求的SNI的值

时间:2021-03-09 22:32:37      阅读:70      评论:0      收藏:0      [点我收藏+]
static async Task Main(string[] args)
        {

            const string DNS_AND_SNI = "www.pixivision.net";

            //注意这个地方是http而不是httpps
            //否则我们不能自定义sslstream
            const string URI = "http://www.pixiv.net/";

            var handler = new SocketsHttpHandler()
            {

                ConnectCallback = (info, token) =>
                {

                    Console.WriteLine(info.InitialRequestMessage.RequestUri);

                    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                    socket.Connect(DNS_AND_SNI, 443);

                    var stream = new NetworkStream(socket, true);

                    SslStream sslstream = new SslStream(stream, false);

                    sslstream.AuthenticateAsClient(new SslClientAuthenticationOptions
                    {
                        //sni字符串
                        TargetHost = DNS_AND_SNI,

                        //tls指定后续的应用层协议
                        ApplicationProtocols = new List<SslApplicationProtocol>(new SslApplicationProtocol[] { SslApplicationProtocol.Http2 })
                    });


                    return new ValueTask<Stream>(sslstream);
                }
            };


            HttpClient client = new HttpClient(handler);

            //协议和tls预先指定的保持一致
            client.DefaultRequestVersion = HttpVersion.Version20;


            string s = await client.GetStringAsync(URI);

            Console.WriteLine(s.Length);
        }

 

.NET5 自定义HttpClient中https协议请求的SNI的值

原文:https://www.cnblogs.com/leikaifeng/p/14507613.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!