使用带有身份验证的 socks 代理会导致 Faraday::ConnectionFailed: end of file
初始化法拉第
Faraday.new do |connection|
connection.proxy = "socks://user:pass<strong i="14">@host</strong>:port"
connection.adapter Faraday.default_adapter
end
并提出任何要求
我可以通过猴子修补 Faraday::Adapter::NetHttp 来修复它,但我不确定这是最好的决定
嗨@yarafan ,感谢您的报告。
我能问一下你是如何给Faraday::Adapter::NetHttp
打猴子补丁的吗?
我使用宝石'socksify'
require "socksify/http"
class Faraday::Adapter::NetHttp
def net_http_connection(env)
if (proxy = env[:request][:proxy])
proxy_class(proxy)
else
Net::HTTP
end.new(env[:url].hostname, env[:url].port || (env[:url].scheme == "https" ? 443 : 80))
end
def proxy_class(proxy)
if proxy.uri.scheme == "socks"
TCPSocket.socks_username = proxy[:user] if proxy[:user]
TCPSocket.socks_password = proxy[:password] if proxy[:password]
Net::HTTP::SOCKSProxy(proxy[:uri].host, proxy[:uri].port)
else
Net::HTTP::Proxy(proxy[:uri].host, proxy[:uri].port, proxy[:uri].user, proxy[:uri].password)
end
end
end
@yarafan我明白了,所以基本上Net::HTTP
不支持开箱即用的 socks 代理。
在这种情况下,我不会将其归类为错误,而是更多地作为支持 socks 代理的功能请求。
与任何其他功能请求一样,应该为当前 0.x 分支中的所有适配器解决此问题,但是对于 v1.0 分支,我们将所有适配器移出法拉第并仅保留 Net::HTTP 。
这将是介绍这个的好时机👍
我将更新标题并标记问题,如果有人在此之前需要使用 socks 代理,他们可以使用你的猴子补丁
向 Net::HTTP.SOCKSProxy 添加身份验证支持
https://github.com/astro/socksify-ruby/pull/24/files
我正在寻找这样做
干得好@yarafan
你好呀。 此功能的状态如何? 它还在开发中吗?
我很感兴趣不必使用猴子补丁来做到这一点
@gcolson是的@technoweenie已经完成了大部分工作🎉
然而不幸的是,我们目前正在等待合并依赖 PR,请参阅我的评论: https ://github.com/lostisland/faraday/pull/992#issuecomment -508437342
最有用的评论
我使用宝石'socksify'