http://rubikitch.com/に移転しました このページをアンテナに追加 RSSフィード

2008-06-27

[]Rubywebアクセスするならhttpclientが手軽

rubyでwebにアクセスするライブラリ、何使う? - おもしろwebサービス開発日記

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

なひなひ 2009/01/02 08:32 2.1.3で、Fileを渡すと中で勝手にContent-Typeとboundaryを設定するようにしてみました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証