Использование прокси-сервера socks с аутентификацией приводит к Faraday::ConnectionFailed: достигнут конец файла
Инициализировать Фарадея
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 мы удаляем все адаптеры из Faraday и оставляем только Net::HTTP.
Самое время представить это 👍
Я обновлю заголовок и назову проблему, если кому-то нужно использовать прокси-серверы socks до этого, они могут использовать ваш обезьяний патч.
Добавить поддержку аутентификации в Net::HTTP.SOCKSProxy.
https://github.com/astro/socksify-ruby/pull/24/files
Я ищу делать именно это
Хорошая работа @yarafan
Всем привет. Каков статус этой функции? Он все еще находится в разработке?
Мне было бы очень интересно не использовать патч для обезьян, чтобы сделать это
@gcolson yes @technoweenie уже сделал большую часть работы 🎉
Однако, к сожалению, в настоящее время мы ожидаем объединения зависимого PR, см. мой комментарий: https://github.com/lostisland/faraday/pull/992#issuecomment -508437342
Самый полезный комментарий
я использую драгоценный камень 'socksify'