Faraday: ファラデーとsocksプロキシと認証サポート

作成日 2018年04月11日  ·  9コメント  ·  ソース: lostisland/faraday

基本情報

  • ファラデーバージョン:0.14、アダプターNet :: HTTP
  • Rubyバージョン:2.3.1

    問題の説明

認証でsocksプロキシを使用すると、Faraday :: ConnectionFailed:ファイルの終わりに達しました

再現する手順

ファラデーを初期化する

    Faraday.new do |connection|
      connection.proxy = "socks://user:pass<strong i="14">@host</strong>:port"
      connection.adapter Faraday.default_adapter
    end

リクエストを送信します

feature v1.0

最も参考になるコメント

私はgem'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

全てのコメント9件

モンキーパッチを適用してFaraday :: Adapter :: NetHttpで修正できましたが、それが最善の決定であったかどうかはわかりません。

こんにちは@yarafan 、報告してくれてありがとう。
Faraday::Adapter::NetHttpにモンキーパッチを適用した方法を教えてください。

私はgem'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プロキシをすぐにサポートしていません。
この場合、これをバグとして分類するのではなく、靴下プロキシをサポートするための機能要求として分類します。
他の機能要求と同様に、これは現在の0.xブランチのすべてのアダプターで解決する必要がありますが、v1.0ブランチでは、すべてのアダプターをファラデーから移動し、Net :: HTTPのみを保持します。
これを紹介する良い機会になります👍

タイトルを更新して問題にラベルを付けます。それ以前にソックスプロキシを使用する必要がある場合は、モンキーパッチを使用できます。

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

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

ioquatix picture ioquatix  ·  4コメント

jordansissel picture jordansissel  ·  5コメント

iMacTia picture iMacTia  ·  3コメント

subvertallchris picture subvertallchris  ·  5コメント

asf-stripe picture asf-stripe  ·  3コメント