我正在尝试设置代理并在documentation中的简单get请求中使用它。
但我总是收到错误!
地址和端口是正确的,开放式的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', '')
}
我做错了什么? 谢谢你的所有答案!
答案 0 :(得分:20)
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', '')
}
答案 1 :(得分:17)
还有另一种选择:
Net :: HTTP将自动从http_proxy
创建代理
环境变量,如果它存在。
所以你可以使用
ENV['http_proxy'] = 'http://172.16.3.160:4226' # your http://address:port here
默认情况下,和Net :: HTTP会将它用于所有请求。
它对第三方库中的net_http请求很有帮助(例如,它适用于gibbon的gem MailChimp。
为代理地址传递nil
以禁用默认http_proxy
。
答案 2 :(得分:8)
如果您在代理后面进行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
答案 3 :(得分:-2)
#!/usr/bin/env ruby
#
require 'rubygems'
require 'net/http'
require 'open-uri'
require 'timeout'
mimvp_url = "http://proxy.mimvp.com/exist.php"
mimvp_url2 = "https://proxy.mimvp.com/exist.php"
mimvp_url3 = "https://apps.bdimg.com/libs/jquery-i18n/1.1.1/jquery.i18n.min.js"
$proxy = '183.222.102.95:8080'
$proxy_addr = $proxy.split(':')[0].strip
$proxy_port = $proxy.split(':')[1].strip
puts $proxy_addr
puts $proxy_port
begin
Timeout.timeout(30) {
# mimvp_url = http://proxy.mimvp.com/exist.php
# uri.host = proxy.mimvp.com
# uri.port = 80
# uri.path = /exist.php
uri = URI.parse(mimvp_url)
result = Net::HTTP.new(uri.host, nil, $proxy_addr, $proxy_port).start { |http|
http.get(uri.path)
}
puts result.body
# mimvp_url = http://proxy.mimvp.com/exist.php
# uri.host = proxy.mimvp.com
# uri.port = 80
# uri.path = /exist.php
# req = #<Net::HTTP::Get:0x007fafa594ff78>
uri = URI.parse(mimvp_url)
req = Net::HTTP::Get.new(uri.path)
result = Net::HTTP::Proxy($proxy_addr, $proxy_port).start(uri.host, uri.port) {|http|
http.request(req)
}
puts result.body
# proxy auth (NO TEST)
$proxy_addr = '<proxy addr>'
$proxy_port = '<proxy_port'
$proxy_user = '<username>' # 代理用户名
$proxy_pass = '<password>' # 代理密码
$website_username = '<website_username>' # 目标网站登录用户名
$website_password = '<website_password>' # 目标网站登录密码
uri = URI.parse(mimvp_url)
req = Net::HTTP::Get.new(uri.path)
req.basic_auth($website_username, $website_password)
result = Net::HTTP::Proxy($proxy_addr, $proxy_port, $proxy_user, $proxy_pass).start(uri.host, uri.port) {|http|
http.request(req)
}
puts result.body
}
rescue => e
puts e.inspect
exit
end