open-uriにできないこと
open-uriはとても便利なのですが、BASIC認証とかPOSTとかができないので、そういうときだけはめんどくさになぁと思いながらnet/httpを使ってたのですが、WWW::Mechanizeを使うのが楽だということを最近知りました。
BASIC認証、ダイジェスト認証:
require "rubygems" require "mechanize" agent= WWW::Mechanize.new() agent.auth("user", "password") page= agent.get("http://example.com/") print(page.body)
POST:
require "rubygems" require "mechanize" agent= WWW::Mechanize.new() page= agent.post("http://example.com/", {"key" => "value"}) print(page.body)
ファイルのアップロードもできます。
require "rubygems" require "mechanize" agent= WWW::Mechanize.new() open("test.txt", "rb") do |f| page= agent.post("http://example.com/", {"file" => f}) print(page.body) end
が、そんな実験をしていたらBASIC認証+ファイルアップロードだとリクエストが壊れるバグを発見。パッチを作りました(作者にも報告済み)。
と思ったらBASIC認証はopen-uriでできるんですね。マニュアルに載ってないので気づきませんでした。
open("http://example.com/", :http_basic_authentication => ["user", "password"]) do |f| print(f.read()) end