首页 > 解决方案 > .NET / C# 中的 HTTP GET 而不是 HTTP Connect

问题描述

如何在不使用 HTTP Connect 方法但使用 HTTP Get 方法的情况下进行 HTTP 隧道。https://en.wikipedia.org/wiki/HTTP_tunnel#HTTP_CONNECT_tunneling我试过了IHttpClientFactoryRestSharp两者都在建立 HTTP 连接。在 node.js 请求模块中,有一个名为的参数tunnel,当 false 使用 HTTP Get 建立连接时,我该如何在 .NET 中做类似的事情。非常感谢您的帮助,一直在寻找这个

Capture1 - C# 使用代理服务器时,http 客户端使用 HTTP Connect 创建隧道

Frame 331: 159 bytes on wire (1272 bits), 159 bytes captured (1272 bits) on interface \Device\NPF_{262229C1-C486-4F85-BCC8-BFC96981C755}, id 0
Ethernet II, Src: IntelCor_37:28:37 (dc:41:a9:37:28:37), Dst: TaicangT_80:60:30 (18:45:93:80:60:30)
Internet Protocol Version 4, Src: {myLocalIp}, Dst: {proxyServerIp}
Transmission Control Protocol, Src Port: 51694, Dst Port: 8888, Seq: 1, Ack: 1, Len: 105
Hypertext Transfer Protocol
    CONNECT {host}:443 HTTP/1.1\r\n
    Host: {host}:443\r\n
    User-Agent: RestSharp/106.11.8.0\r\n
    \r\n
    [Full request URI: {url}:443]
    [HTTP request 1/1]
    [Response in frame: 341]

Capture2 - 带有隧道:false 的 node.js,此请求也通过相同的代理服务器,但通过普通的 HTTP GET 方法并且没有隧道

Frame 92: 393 bytes on wire (3144 bits), 393 bytes captured (3144 bits) on interface \Device\NPF_{262229C1-C486-4F85-BCC8-BFC96981C755}, id 0
Ethernet II, Src: IntelCor_37:28:37 (dc:41:a9:37:28:37), Dst: TaicangT_80:60:30 (18:45:93:80:60:30)
Internet Protocol Version 4, Src: {myLocalIp}, Dst: {proxyServerIp}
Transmission Control Protocol, Src Port: 51842, Dst Port: 8888, Seq: 1, Ack: 1, Len: 339
Hypertext Transfer Protocol
    GET {url} HTTP/1.1\r\n
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15\r\n
    x-cache-proxyname: i-05ad6154426f07671\r\n
    host: {host}\r\n
    Connection: close\r\n
    \r\n
    [Full request URI: {url}]
    [HTTP request 1/1]
    [Response in frame: 96]

标签: c#.netasp.net-core.net-core

解决方案


推荐阅读