如何在rubys net/http中设置代理?

ada*_*a91 16 ruby proxy http net-http

我正在尝试设置代理并在文档中的简单get请求中使用它.但我总是收到错误!地址和端口是正确的,它是开放的,它工作..它的 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', '')
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?谢谢你的回答!

Fra*_*bot 23

Net::HTTP.new('google.de', nil, proxy_addr, proxy_port).start { |http|
Run Code Online (Sandbox Code Playgroud)

这将创建一个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', '')
}
Run Code Online (Sandbox Code Playgroud)


Mih*_*kov 21

还有另一种选择:

如果存在,Net :: HTTP将自动从http_proxy 环境变量创建代理.

所以你可以使用

ENV['http_proxy'] = 'http://172.16.3.160:4226' # your http://address:port here
Run Code Online (Sandbox Code Playgroud)

默认情况下,Net :: HTTP会将它用于所有请求.

它可以是在第三方库net_http请求(例如,它适用于创业板有帮助长臂猿MailChimp).

传递nil代理地址以禁用默认值http_proxy.

  • 一点澄清:`Net :: HTTP`只有在通过`Net :: HTTP.new`调用时才会自动使用`http_proxy`环境变量.使用`Net :: HTTP.start`不会使用`http_proxy`环境变量,因为如果没有指定,它会传递代理地址的`nil`(而不是传递`:ENV`). (9认同)

mac*_*qcq 9

如果您在代理后面进行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
Run Code Online (Sandbox Code Playgroud)