7

私はruby 1.9.3を使用open-uriしており、URLを取得して投稿しようとしていますNet:HTTP

両方にプロキシ認証を使用しようとしています:

POSTでリクエストを実行しようとしていますnet/http:

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. すべてを確認しましたが、同じ認証とプロキシの詳細を使用してブラウザーで動作しますが、ルビーでそれを行うことはできません。

上記のコードを変更して、http 認証を適切に追加するにはどうすればよいですか? この残虐行為を経験した人はいますか?

4

1 に答える 1

18

試す:

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 認証によるプロキシのサポートを http と呼ばれる Net::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現在は廃止されていると見なされます。の新しいインスタンスを作成するときに、プロキシを構成できるようになりましたNet::HTTP詳細については、 Net::HTTP.newのドキュメントを参照してください。

于 2012-04-06T12:06:33.687 に答える