我尝试通过http / https代理创建代理到代理的应用程序,但是我从没得到回应

时间:2019-01-14 11:56:00

标签: go https proxy connect

我正在尝试在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
    }

}

我有问题 代理错误无效的字节(块长度)

0 个答案:

没有答案