簡體   English   中英

Ruby 使用 OpenURI 或 .net/http 的代理身份驗證 GET/POST

[英]Ruby Proxy Authentication GET/POST with OpenURI or net/http

我正在使用 ruby 1.9.3 並嘗試使用open-uri獲取 url 並嘗試使用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

對於我無法進行POSTopen-uri ,我使用:

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 身份驗證? 有沒有人經歷過這種暴行?

嘗試:

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

編輯 11/24/2020Net::HTTP::Proxy現在被認為已過時 您現在可以在創建Net::HTTP的新實例時配置代理。 有關詳細信息,請參閱Net::HTTP.new的文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM