go - 具有上下文支持的 socks5 代理客户端

标签 go proxy

是否可以使用带有 Dialer 的上下文?由 SOCKS5 返回来自网络/代理库的功能?

如果是 SOCKS5 代理 Dialer在建立连接时阻塞,使用代理的 HTTP 客户端 Dialer可能会卡住而无法中止连接。

最佳答案

golang.org/x/net/proxy.SOCKS5 的幕后它使用 golang.org/x/net/internal/socks.Dialer ,它有一个导出方法 DialContext ,从 Go 1.7 开始,http.Transport支持自定义DialContext作为一个领域。因此,您可以使用方法 DialContext 将拨号器转换为接口(interface)。并将其设置为自定义传输。

dc := dialer.(interface {
    DialContext(ctx context.Context, network, addr string) (net.Conn, error)
})
httpTransport.DialContext = dc.DialContext

游乐场:https://play.golang.org/p/tSi9IZ-2Zqg

注意:虽然这是有效的 Go 代码,但有些人认为它依赖于包不想导出的实现细节(隐藏在 internal 中)。我认为最好将问题发送给 Go 团队要求导出;如果对您来说问题太大,您可以复制代码并防止其更改,或者使用 http.Client.Timeout或写开始每http.Do同时包装一个 select处理任何阻塞操作之类的上下文。

关于go - 具有上下文支持的 socks5 代理客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59456936/

相关文章:

java - 可以处理 http 和 https 请求的代理服务器 - java

go - Go中两个变量的for循环

PHP:由于身份验证服务器,POST 数据丢失

docker - 如何在 Go Docker 多阶段构建中添加本地依赖?

go - 嵌套开关在golang中合法吗?

python - 如何在发送给客户端之前使用squid代理服务器修改html页面

linux - 配置 virtualbox 虚拟机以使用主机的代理设置

proxy - nginx 1.2.0 - socket.io - HTTP/1.1 - 代理 websocket 连接

go - 无法连接到代理 "Certificate signed by unknown authority"

go - 如何使路径 "/"不匹配 Golang net/http 中所有其他不匹配的路径