Faraday: Substituindo as configurações de proxy do ambiente

Criado em 28 nov. 2017  ·  5Comentários  ·  Fonte: lostisland/faraday

Não consigo descobrir se existe um método com Faraday para substituir as configurações de proxy de variável de ambiente (http_proxy, https_proxy, no_proxy). Tentei definir proxy=nil em um argumento e bloco de configuração Faraday.new , mas não parece funcionar:

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

Esse último resultado é ProxyOptions.from(URI::Generic) ou algo assim sendo atribuído como o proxy, e ainda está produzindo um proxy não nulo

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

Realmente não parece lidar com este caso adequadamente. Alguma ideia?

(Durante o mergulho de código, parecia que a análise de opções provavelmente não lida bem com configurações nulas explícitas)

feature help wanted

Comentários muito úteis

@guille-moe a solução que estou planejando corrigir o problema de @ jeffb-stell deve permitir que você também silencie esses avisos especificamente.

Todos 5 comentários

Olá @ jeffb-stell,

meu entendimento é que você deseja ignorar o valor de proxy do ambiente para Faraday.
Eu realmente não entendo por que você gostaria de fazer isso, mas aparentemente esse caso nunca foi considerado até agora.
Como você já descobriu por si mesmo, o ProxyOptions fica um pouco louco se você passa nil e é por isso que nenhuma de suas soluções funciona.
Eu posso tentar consertar isso com um PR, mas ele só estará disponível no Faraday 0.14.0 ou 0.14.1 quando ele obterá lançamentos, então você precisará esperar e atualizar quando chegar a hora (é difícil revisar um PR se você quiser contribuir!).

Nesse ínterim, uma possível solução rápida seria iniciar seu aplicativo com a variável ENV substituída. Basta acrescentar env -u http_proxy ao comando que você usa para iniciá-lo. Por exemplo:

# For the Ruby console
env -u http_proxy irb

# For Rails
env -u http_proxy rails

Olá @iMacTia ,

Mesmo problema, eu realmente não quero alterar / desativar nada, mas com o warn em no_proxy env (https://github.com/lostisland/faraday/blob/4d1ddc130bd224adf25a19eaf0e81fd236a47285/lib/ faraday / connection.rb # L460) quando eu uso faraday (ou um gem que é isso) dentro de um contêiner docker no macOS por padrão, recebo um no_proxy env: https://docs.docker.com/docker -for-mac / networking / so many warn ....

Qual é a melhor solução para mim ou melhoria para Faraday? (Pode propor um PR em breve)

Poderia ser chamado de algo explícito como ENV['FARADAY_SILENCE_INTERNAL_WARNINGS'] ?

Ou @ guille-moe é RUBYOPT=-W0 - silence warn começo ao fim, não é prático em seu caso de uso?

@guille-moe a solução que estou planejando corrigir o problema de @ jeffb-stell deve permitir que você também silencie esses avisos especificamente.

@ guille-moe @ jeffb-stell
Eu introduzi uma nova configuração no # 754, agora você pode desativar a detecção de proxy de env desta forma:

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

Ainda não mesclei o PR, se você pudesse gastar alguns minutos testando-o em seus aplicativos, ficaria mais confiante para mesclá-lo 😄
Também sugestões sobre testes adicionais são bem-vindas 👍

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Lewiscowles1986 picture Lewiscowles1986  ·  4Comentários

ioquatix picture ioquatix  ·  4Comentários

QuinnWilton picture QuinnWilton  ·  4Comentários

aleksb86 picture aleksb86  ·  3Comentários

yykamei picture yykamei  ·  4Comentários