monthly gimite

試験運用中。

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