C# cURL——在c中解析#

C# cURL——在c中解析#,c#,curl,.net-core,C#,Curl,.net Core,我试图模仿curl的——在C#中解析参数。我将对启用SNI的服务器执行https请求,以确保在更改DNS记录之前一切正常。我目前在Windows上,所以我可以更改主机文件,但这不是一个很好的解决方案 我还没有深入研究System.Net.HttpClient代码,但是如果libcurl在下面,我相信我需要设置的是CURLOPT\u RESOLVE参数 在一个新进程中运行cURL似乎不是独立于平台的 我是否在WebRequest或HttpClient中缺少某些内容?是否有另一个更灵活的lib支持此

我试图模仿curl的
——在C#中解析
参数。我将对启用SNI的服务器执行https请求,以确保在更改DNS记录之前一切正常。我目前在Windows上,所以我可以更改主机文件,但这不是一个很好的解决方案

我还没有深入研究
System.Net.HttpClient
代码,但是如果libcurl在下面,我相信我需要设置的是
CURLOPT\u RESOLVE
参数

在一个新进程中运行cURL似乎不是独立于平台的

我是否在WebRequest或HttpClient中缺少某些内容?是否有另一个更灵活的lib支持此功能


谢谢

您可以使用direct TcpClient进行此操作。IIRC,HttpClient根本不使用libcurl

但是,您可以做什么:

        {
            TcpClient client = new TcpClient();

            string ipAddress = "216.58.204.46";
            ushort port = 443;

            client.Connect(IPAddress.Parse(ipAddress), port);

            using (SslStream sslStream = new SslStream(client.GetStream(), false, ((sender, certificate, chain, errors) => true)))
            {
                sslStream.AuthenticateAsClient("www.google.com");

                string headers = "GET https://www.google.com/ HTTP/1.1\r\nHost: google.com\r\n\r\n";
                byte[] payload = Encoding.UTF8.GetBytes(headers);
                sslStream.Write(payload);

                byte[] buffer = new byte[1024];
                sslStream.Read(buffer);

                Console.WriteLine(Encoding.UTF8.GetString(buffer));
            }

            Console.ReadKey();
        }
如果需要,也可以在其中添加自己的ssl验证

给你这个答案作为一个临时补丁,因为我也不知道如何使用HttpClient



您需要更改IP地址、端口和标头(根据需要)。应该有其他的框架来实现这一点,但由于这是个人测试可能需要的东西,所以不需要任何复杂的东西。

注意:由于是https,设置HTTP主机头是不够的。如果您更改
AuthenticateTaseClient
以使用域而不是
ipAddress
,此解决方案可以工作。否则SNI标志将是ip。@MyGGaN我刚刚在回答中更改了它。谢谢你的意见!