我正在通过HTTP代理使用默认的“net/http”Golang lib执行一个简单的HTTPGET请求,并希望读取第一个代理应答的内容(对于使用CONNECT方法的HTTP客户机请求)。
HTTP/1.1 200 OK
Request-Uid: <some id>
<another header>: <another value>
Golang代码:
...
proxyUrlParsed, errUrl := url.Parse(proxyUrl)
tr := &http.Transport{
Proxy: http.ProxyURL(proxyUrlParsed),
}
client := &http.Client{
Transport: tr,
}
request, errReq := http.NewRequest("GET", targetUrl, nil)
response, errDo := client.Do(request)
// Response contains HTTP headers from the reply from the target resource but not the intermediate proxy.
我用DialContext部分地解决了这个问题,但是我需要实现协议的一些部分,我发现这些部分对于以后的支持来说不是那么方便和昂贵。
1条答案
按热度按时间gxwragnw1#
隧道代理
以curl客户端的使用为例,在请求https时,使用
CONNECT
方法连接隧道连接,得到的流内容是TLS加密的内容,代理无法解密。如果有tls证书,可以尝试解析响应流。
wireshark
捕获https请求时,需要在浏览器中配置一个参数,证书保存在指定的文件中第一个
反向代理服务器
使用
/net/http/httputil.ReverseProxy
代理请求,将ModifyResponse
字段设置为响应挂钩。curl请求: