2013-04-03 25 views
9

私はプロキシを設定し、documentationのような単純なget要求で使用しようとしています。 しかし、私はいつもエラーを受け取ります! アドレスとポートは正常であり、それは働いています。それは http://proxy:8080です。ruby​​s net/httpでプロキシを設定する方法は?

proxy_addr = 'proxy' 
proxy_port = 8080 

Net::HTTP.new('google.de', nil, proxy_addr, proxy_port).start { |http| 
    # always proxy via your.proxy.addr:8080 
    Net::HTTP.get('google.de', '') 
} 

私は間違っていますか? すべてのお返事ありがとうございます!

答えて

17
Net::HTTP.new('google.de', nil, proxy_addr, proxy_port).start { |http| 

これによりブロック内で使用するhttpオブジェクトが作成されます。それが存在する場合

ネット:: HTTPが自動的にhttp_proxy 環境変数からプロキシを作成します。別のオプションがありますNet::HTTP.get('google.de', '')

proxy_addr = 'proxy' 
proxy_port = 8080 

Net::HTTP.new('google.de', nil, proxy_addr, proxy_port).start { |http| 
    # always proxy via your.proxy.addr:8080 
    http.get('google.de', '') 
} 
10

ここでは、それを使うのではなく、新しいものを毎回生成します。

だから、

ENV['http_proxy'] = 'http://172.16.3.160:4226' # your http://address:port here 

とネットを使用することができます:: HTTPはデフォルトですべての要求のためにそれを使用します。

サードパーティ製のライブラリでnet_httpリクエストを行うと便利です(たとえば、MailChimpの場合はgibbon)。

プロキシアドレスをnilに設定すると、デフォルトのhttp_proxyが無効になります。

require "uri" 
require 'net/http' 

proxy_host = '<proxy addr>' 
proxy_port = '<proxy_port' 
proxy_user = '<username>' 
proxy_pass = '<password>' 

uri = URI.parse("https://saucelabs.com:80/rest/v1/users/<username>") 
proxy = Net::HTTP::Proxy(proxy_host, proxy_port, proxy_user, proxy_pass) 

req = Net::HTTP::Get.new(uri.path) 
req.basic_auth(<sauce_username>,<sauce_password>) 

result = proxy.start(uri.host,uri.port) do |http| 
http.request(req) 
end 

puts result.body 
+6

少し明確化:: 'ネット:: HTTP'が自動的に使用されます。ここ – cbliard

+0

@cbliard良い点。 NET :: HTTP.start(url.hostname、url.port、:p_port =>:ENV) 'を使って、' NET :: HTTP.start'でプロキシの自動検出を使用することはできます。 – Aert

+0

@Aert ':p_port =>:ENV'は動作しますが、読みやすさが気に入らない:)もう一つ注意すべきことは、 'http_proxy'のユーザ名とパスワードは(http:// username:password @ address:port'のように)読み込まれません。 – cbliard

6

は、プロキシの背後にあるREST API呼び出しを行っている場合は動作するコードです`http_proxy`環境変数は` Net :: HTTP.new`を通して呼び出されたときだけです。 `Net :: HTTP.start`を使うと` http_proxy`環境変数は使われません。指定されていなければ( `:ENV`を渡す代わりに)プロキシアドレスに` nil`を渡すからです。
関連する問題