web-dev-qa-db-ja.com

rubys net / httpでプロキシを設定する方法は?

documentation のような単純なgetリクエストでプロキシを設定して使用しようとしています。しかし、常にエラーが表示されます。アドレスとポートはopen-uriで正しく動作します。それはhttp://proxy:8080です。

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', '')
}

何が悪いのですか?すべての回答をありがとう!

16
ada91
_Net::HTTP.new('google.de', nil, proxy_addr, proxy_port).start { |http|
_

これにより、ブロックで使用するhttpオブジェクトが作成されます。毎回新しいものを生成するのではなく、それを使用してください。ここでは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', '')
}
_
23
Frambot

別のオプションがあります:

Net :: HTTPは、存在する場合、http_proxy環境変数からプロキシを自動的に作成します。

だからあなたは使うことができます

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

そしてNet :: HTTPはデフォルトですべてのリクエストにそれを使用します。

サードパーティライブラリのnet_httpリクエストに役立ちます(たとえば、gem gibbon for MailChimp で機能します)。

プロキシアドレスにnilを渡して、デフォルトのhttp_proxyを無効にします。

23

プロキシの背後でREST apiを呼び出す場合に機能するコードは次のとおりです。

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
9
machzqcq