Faraday: 環境プロキシ設定のオーバーライド

作成日 2017年11月28日  ·  5コメント  ·  ソース: lostisland/faraday

環境変数プロキシ設定(http_proxy、https_proxy、no_proxy)をオーバーライドするためのFaradayのメソッドがあるかどうかを理解できません。 Faraday.new引数と構成ブロックにproxy=nilを設定しようとしましたが、うまくいかないようです。

> c = Faraday.new('https://www.google.com', proxy: nil)
 => #<Faraday::Connection:0x00007fd1e2176180 @parallel_manager=nil, @headers={"User-Agent"=>"Faraday v0.13.1"}, @params={}, @options=#<Faraday::RequestOptions (empty)>, @ssl=#<Faraday::SSLOptions (empty)>, @default_parallel_manager=nil, @builder=#<Faraday::RackBuilder:0x00007fd1e2175d20 @handlers=[Faraday::Request::UrlEncoded, Faraday::Adapter::NetHttp]>, @url_prefix=#<URI::HTTPS https://www.google.com/>, @proxy=#<Faraday::ProxyOptions uri=#<URI::HTTP http://127.0.0.1:3128/>>, @temp_proxy=#<Faraday::ProxyOptions uri=#<URI::HTTP http://127.0.0.1:3128/>>>
> c = Faraday.new('https://www.google.com') { |c| c.proxy=nil 
c.adapter :net_http
}
(Object doesn't support #inspect)
> c = Faraday.new('https://www.google.com', proxy: '')
 => #<Faraday::Connection:0x00007fd1e28f2300 @parallel_manager=nil, @headers={"User-Agent"=>"Faraday v0.13.1"}, @params={}, @options=#<Faraday::RequestOptions (empty)>, @ssl=#<Faraday::SSLOptions (empty)>, @default_parallel_manager=nil, @builder=#<Faraday::RackBuilder:0x00007fd1e28f1d60 @handlers=[Faraday::Request::UrlEncoded, Faraday::Adapter::NetHttp]>, @url_prefix=#<URI::HTTPS https://www.google.com/>, @proxy=#<Faraday::ProxyOptions uri=#<URI::Generic >>, @temp_proxy=#<Faraday::ProxyOptions uri=#<URI::Generic >>>
> c = Faraday.new('https://www.google.com/') { |co|
2.4.2 :025 >     co.proxy = ''
2.4.2 :026?>   co.adapter :net_http
2.4.2 :027?>   }
 => #<Faraday::Connection:0x00007fe0af1bd4c8 @parallel_manager=nil, @headers={"User-Agent"=>"Faraday v0.13.1"}, @params={}, @options=#<Faraday::RequestOptions (empty)>, @ssl=#<Faraday::SSLOptions (empty)>, @default_parallel_manager=nil, @builder=#<Faraday::RackBuilder:0x00007fe0af1bd1d0 @handlers=[Faraday::Adapter::NetHttp]>, @url_prefix=#<URI::HTTPS https://nexus-gss.uscis.dhs.gov/>, @proxy=#<Faraday::ProxyOptions uri=#<URI::Generic >>, @temp_proxy=#<Faraday::ProxyOptions uri=#<URI::HTTP http://127.0.0.1:3128/>>>

その最後の結果は、 ProxyOptions.from(URI::Generic)またはそのようなものがプロキシとして割り当てられており、それでもnil以外のプロキシを生成しています。

https://github.com/lostisland/faraday/blob/master/lib/faraday/adapter/net_http.rb#L88 -L94

このケースを適切に処理していないようです。 何か案は?

(コードダイビング中、オプションの解析はおそらく明示的なnil設定をうまく処理しないようでした)

feature help wanted

最も参考になるコメント

@ guille-moe @ jeffb-stellの問題を修正する予定のソリューションでは、これらの警告を具体的に消音することもできます。

全てのコメント5件

こんにちは@ jeffb-stell、

私の理解では、ファラデーの環境プロキシ値を無視したいということです。
なぜそうしたいのかよくわかりませんが、今まで考えられなかったようです。
すでにご存知のとおり、 nilを渡すと、ProxyOptionsが少しおかしくなります。そのため、どのソリューションも機能しません。
PRでこれを修正することはできますが、リリースがリリースされるファラデー0.14.0または0.14.1でのみ利用可能になるため、時間になったときに待って更新する必要があります(PRを確認する可能性があります)あなたが貢献したいなら!)。

それまでの間、考えられる迅速な解決策は、ENV変数をオーバーライドしてアプリケーションを起動することです。 起動に使用するコマンドの前にenv -u http_proxyを追加するだけです。 例えば:

# For the Ruby console
env -u http_proxy irb

# For Rails
env -u http_proxy rails

こんにちは@iMacTia

同じ問題ですが、 no_proxy env(https://github.com/lostisland/faraday/blob/4d1ddc130bd224adf25a19eaf0e81fd236a47285/lib/)のwarn以外は、実際には何も変更/無効化したくありません。 faraday / connection.rb#L460)macOSのdockerコンテナー内でfaraday(またはそれであるgem)をデフォルトで使用すると、 no_proxy envを取得します: https

私にとって最良の解決策またはファラデーの改善は何ですか? (すぐにPRを提案できます)

ENV['FARADAY_SILENCE_INTERNAL_WARNINGS']ような明示的なものと呼ぶことができますか?

または、@ guille-moeはRUBYOPT=-W0 -全体を通してwarn沈黙させますが、ユースケースでは実用的ではありませんか?

@ guille-moe @ jeffb-stellの問題を修正する予定のソリューションでは、これらの警告を具体的に消音することもできます。

@ guille-moe @ jeffb-stell
#754で新しい設定を導入しました。これで、次のようにenvプロキシ検出を無効にできます。

Faraday.ignore_env_proxy = true # new setting, defaults to false
ENV['http_proxy'] = 'http://test.proxy.com:80'

conn = Faraday::Connection.new(....)
# conn will NOT use the env proxy

私はまだPRをマージしていません。アプリケーションにテストするために数分を費やすことができれば、それをマージすることに自信が持てるようになります😄
追加のテストに関する提案も歓迎します👍

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