Faraday: Remplacement des paramètres de proxy environnementaux

Créé le 28 nov. 2017  ·  5Commentaires  ·  Source: lostisland/faraday

Je ne parviens pas à déterminer s'il existe une méthode avec Faraday pour remplacer les paramètres de proxy des variables d'environnement (http_proxy, https_proxy, no_proxy). J'ai essayé de définir proxy=nil dans un argument Faraday.new et un bloc de configuration, mais cela ne semble pas fonctionner :

> 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/>>>

Ce dernier résultat est ProxyOptions.from(URI::Generic) ou quelque chose comme le proxy, et il donne toujours un proxy non nul

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

Ne semble pas vraiment gérer ce cas correctement. Des idées?

(Pendant la plongée dans le code, il semblait que l'analyse des options ne gère probablement pas bien les paramètres nil explicites)

feature help wanted

Commentaire le plus utile

@guille-moe la solution que je prévois de résoudre le problème @jeffb-stell devrait vous permettre également de faire taire spécifiquement ces avertissements.

Tous les 5 commentaires

Salut @jeffb-stell,

si je comprends bien, vous souhaitez ignorer la valeur proxy de l'environnement pour Faraday.
Je ne comprends pas vraiment pourquoi vous voudriez faire ça, mais apparemment ce cas n'a jamais été envisagé jusqu'à maintenant.
Comme vous l'avez déjà découvert par vous-même, ProxyOptions devient un peu fou si vous passez nil et c'est pourquoi aucune de vos solutions ne fonctionne.
Je peux essayer de résoudre ce problème avec un PR, mais cela ne sera disponible que dans Faraday 0.14.0 ou 0.14.1 quand il sortira, vous devrez donc attendre et mettre à jour le moment venu (peut-être pour revoir un PR si vous voulez contribuer !).

En attendant, une solution rapide possible serait de lancer votre application avec la variable ENV remplacée. Ajoutez simplement env -u http_proxy à la commande que vous utilisez pour le lancer. Par exemple:

# For the Ruby console
env -u http_proxy irb

# For Rails
env -u http_proxy rails

Salut @iMacTia ,

Même problème, je ne veux vraiment rien changer/désactiver mais avec le warn sur no_proxy env (https://github.com/lostisland/faraday/blob/4d1ddc130bd224adf25a19eaf0e81fd236a47285/lib/ faraday/connection.rb#L460) lorsque j'utilise faraday (ou une gemme qui l'est) dans un conteneur docker sur macOS par défaut, j'obtiens un no_proxy env : https://docs.docker.com/docker -for-mac/networking/ tellement avertissent ....

Quelle est la meilleure solution pour moi ou amélioration pour Faraday ? (Peut proposer un PR bientôt)

Pourrait-il s'appeler quelque chose d'explicite comme ENV['FARADAY_SILENCE_INTERNAL_WARNINGS'] ?

Ou, @guille-moe est RUBYOPT=-W0 - silence warn partout, pas pratique dans votre cas d'utilisation ?

@guille-moe la solution que je prévois de résoudre le problème @jeffb-stell devrait vous permettre également de faire taire spécifiquement ces avertissements.

@guille-moe @jeffb-stell
J'ai introduit un nouveau paramètre dans #754, vous pouvez maintenant désactiver la détection de proxy env comme ceci :

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

Je n'ai pas encore fusionné le PR, si vous pouviez passer quelques minutes pour le tester dans vos applications, cela me rendrait plus confiant pour le fusionner 😄
Aussi des suggestions sur des tests supplémentaires sont les bienvenues

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

mokolabs picture mokolabs  ·  3Commentaires

t3hk0d3 picture t3hk0d3  ·  3Commentaires

yusefu picture yusefu  ·  3Commentaires

jedeleh picture jedeleh  ·  3Commentaires

JasonBarnabe picture JasonBarnabe  ·  4Commentaires