繁体   English   中英

是否可以在 Go 中将代理/袜子与 http2 客户端一起使用?

[英]Is it possible to use proxy/socks with http2 client in Go?

我发现,http2 包中传输的实现不支持 http2 客户端的代理/袜子。 有没有简单的方法让它工作?

是的,我似乎想起了不久前关于 http2 客户端不使用 HTTP/SOCKS5 代理的事情。 无论如何,时间已经过去了,下面的工作正常(如果这就是你所追求的)。 请注意,如果在传输中使用自定义 DialTLS,则仍不支持代理连接。

package main

import (
    "log"
    "net/http"
    "net/url"
)

func main() {
    var addressString = "https://www.facebook.com/"
    var proxyString = "socks5://127.0.0.1:9150"

    req, _ := http.NewRequest("GET", addressString, nil)
    tr := &http.Transport{
        Proxy: func(req *http.Request) (*url.URL, error) {
            proxyURI, err := url.Parse(proxyString)
            return proxyURI, err
        },
    }

   // The http client is equipped to handle http/2 connections
    hc := &http.Client{Transport: tr}
    resp, _ := hc.Do(req)
    log.Print(resp)
}

如果您希望通过套接字进行通信,则应该可以使用以下方法:

socket := "<socket-path>"
// server
sock, err := net.Listen("unix", socket)
go http.Serve(s, nil)

//client
httpc := http.Client{
    Transport: &http.Transport{
        DialContext: func(_ context.Context, _, _ string) (net.Conn, error) {
            return net.Dial("unix", socket)
        },
    },
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM