我正在尝试在golang上编写旋转代理。 代理http:时,复制客户端的请求并转发该请求没有问题。 但是,当我想转发https时,因为它是加密的,所以我无法读取请求正文。 我了解到,借助HTTP CONNECT,可以创建tcp隧道,但是我无法使第三方代理服务器正常工作。 我的工作计划应该是这样的: 1)客户端-> 2)我的代理服务器-> 3)第三方代理服务器-> 4)客户端所需的站点 但现在我被困在2到3之间 谁能帮我吗?
我以这个代码为例 HTTP standard
func handle(con net.Conn) {
defer con.Close()
req := &http.Request{
Method: "CONNECT",
Host: con.LocalAddr().String(),
URL: &url.URL{},
}
conOut, err := net.DialTimeout("tcp", "EXTERNALPROXYIP:8080", 2*time.Second)
if err != nil {
log.Printf("proxy error %v", err)
}
defer conOut.Close()
if err := req.WriteProxy(conOut); err != nil {
log.Printf("proxy error %v", err)
} else if res, err := http.ReadResponse(bufio.NewReader(conOut), req); err != nil {
log.Printf("proxy error %v", err)
} else if res.StatusCode != 200 {
log.Printf("proxy error %v", err)
} else {
sent := make(chan bool)
go func() {
_, err := io.Copy(conOut, con)
if err != nil {
log.Printf("proxy error %v", err)
}
close(sent)
}()
_, err := io.Copy(con, res.Body)
if err != nil {
log.Printf("proxy error %v", err) ------> ERROR
}
_ = <-sent
}
}
我有问题 代理错误无效的字节(块长度)