【问题标题】:Ruby Proxy Authentication GET/POST with OpenURI or net/http使用 OpenURI 或 net/http 进行 Ruby 代理身份验证 GET/POST
【发布时间】:2012-04-20 01:05:42
【问题描述】:

我正在使用 ruby​​ 1.9.3 并尝试使用 open-uri 获取网址并尝试使用 Net:HTTP 发布

我正在尝试对两者都使用代理身份验证:

尝试使用net/http 发出POST 请求:

require 'net/http'
require 'open-uri'
http = Net::HTTP.new("google.com", 80)
headers = { 'User-Agent' => 'Ruby 193'}

resp, data = http.post("/", "name1=value1&name2=value2", headers)
puts data

对于open-uri,我无法做到POST,我使用:

data = open("http://google.com/","User-Agent"=> "Ruby 193").read

如何修改这些以使用带有 HTTP 身份验证的代理

我已经尝试过(对于 open-uri)

data = open("http://google.com/","User-Agent"=> "Ruby 193", :proxy_http_basic_authentication => ["http://proxy.com:8000/", "proxy-user", "proxy-password"]).read

但是我得到的只是OpenURI::HTTPError: 407 Proxy Authentication Required。我已经验证了所有内容,它可以在具有相同身份验证和代理详细信息的浏览器中使用,但我无法让 ruby​​ 执行此操作。

如何修改上面的代码以正确添加 http 身份验证?有没有人经历过这种暴行?

【问题讨论】:

    标签: ruby-on-rails ruby proxy open-uri net-http


    【解决方案1】:

    试试:

    require "open-uri"
    proxy_uri = URI.parse("http://proxy.com:8000")
    
    data = open("http://www.whatismyipaddress.com/", :proxy_http_basic_authentication => [proxy_uri, "username", "password"]).read
    puts data
    

    至于 Net::HTTP,我最近在名为 http 的 Net::HTTP 包装库中实现了对带有 http 身份验证的代理的支持。如果您查看我的最后一个拉取请求,您将看到基本实现。

    编辑:希望这会让你朝着正确的方向前进。

    Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port,"username","password").start('whatismyipaddress.com') do |http| 
      puts http.get('/').body
    end
    

    编辑 2020 年 11 月 24 日Net::HTTP::Proxy 现在被视为obsolete。您现在可以在创建 Net::HTTP 的新实例时配置代理。有关详细信息,请参阅Net::HTTP.new 的文档。

    【讨论】:

      猜你喜欢
      • 2010-12-10
      • 2021-10-13
      • 1970-01-01
      • 2010-09-27
      • 2020-10-19
      • 1970-01-01
      • 2019-09-30
      • 2017-11-24
      相关资源
      最近更新 更多