Rubyでwebにアクセスするならhttpclientが手軽
http://d.hatena.ne.jp/willnet/20080626/1214487378
httpclientはopen-uriの手軽さと、Net::HTTPの機能を両立させてる使い勝手のいいライブラリだ。クッキーやkeep-aliveもサポートしている。ただし、Ruby 1.9未対応。Ruby 1.9だとParseDateなんてないぞーってエラーがでてしまう。→最新版でRuby 1.9対応
POSTの場合はpost_contentを使う。串、User-Agent、FromヘッダはHTTPClient.newの引数で。
require 'rubygems' require 'httpclient' require 'kconv' hc = HTTPClient.new query = "ruby" html = hc.get_content("http://www.google.co.jp/search", "q" => query) html.toeuc[/検索結果 約 <b>(.+?)<\/b> 件/, 1] # => "118,000,000"
WWW::Mechanizeじゃ重すぎる場合は使ってみては?
追記
RubyでHTTPのPostを使用してファイルをアップロードするスクリプ… - 人力検索はてな
ファイルのアップロードはFileオブジェクトを渡せばpost stringを内部で生成してくれる。便利!
content-typeの設定を忘れずに。←最新版だともはや不要
require 'rubygems' require 'httpclient' boundary = "123456" c = HTTPClient.new open("/r/hoge.txt") do |file| postdata = { "first_name" => "michael", "last_name" => "jackson", "file" => file } puts c.post_content("http://localhost:9998/hoge.cgi", postdata, "content-type" => "multipart/form-data, boundary=#{boundary}") end
[2009/01/06]追記
2.1.3で、Fileを渡すと中で勝手にContent-Typeとboundaryを設定するようにしてみました。
おお、こりゃ嬉しい^^コードが見やすくなったよ。
しかも念願のRuby 1.9対応。どうもありがとうございます。
require 'httpclient' boundary = "123456" c = HTTPClient.new open("/tmp/hoge.txt","w"){|f| f.puts "httptest" } open("/tmp/hoge.txt") do |file| postdata = { "first_name" => "michael", "last_name" => "jackson", "file" => file } puts c.post_content("http://localhost:9998/hoge.cgi", postdata) end # >> httptest