首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有上下文支持的socks5代理客户端

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

Stack Overflow用户
提问于 2019-12-23 22:25:44
回答 1查看 777关注 0票数 0

可以将上下文与net/proxy库中的SOCKS5函数返回的Dialer一起使用吗?

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

EN

回答 1

Stack Overflow用户

发布于 2019-12-23 22:57:43

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

代码语言:javascript
复制
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 team发送一个问题,要求导出它;如果这对你来说是一个太多的问题,你可以复制代码并保护它不被更改,或者使用http.Client.Timeout,或者同时编写start every http.Do并在它上面包装一个select作为上下文,就像处理任何阻塞操作一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59456936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档