Cookieの使い方
id:mzp:20070214:1171465153の続き。RubyのNet::HTTPでのクッキーの扱い方。
クッキーの受信
クッキは、Set-Cookie:というフィールドに書かれている。
ただし、複数のSet-Cookieフィールドが存在することが普通なので、Net::HTTP#get_fieldsを使って配列の形で取得する。
require 'net/http' Net::HTTP.start('www.tohoho-web.com'){|http| response, = http.get '/cgi/wwwcook.cgi' p response.get_fields('Set-Cookie') }
実行例:
["KAISUU=2; expires=Tue, 1-Jan-2030 00:00:00 GMT;", "HIZUKE=2007%2F02%2F16%2021%3A46%3A08; expires=Tue, 1-Jan-2030 00:00:00 GMT;"]
ただし、この状態でクッキーは
KAISUU=2; expires=Tue, 1-Jan-2030 00:00:00 GMT;
という形をしているので使いづらい。そこで、KAISUU=2の部分だけを取り出して、ハッシュに格納しておく。
require 'net/http' cookie = {} Net::HTTP.start('www.tohoho-web.com'){|http| response, = http.get '/cgi/wwwcook.cgi' response.get_fields('Set-Cookie').each{|str| k,v = str[0...str.index(';')].split('=') cookie[k] = v } } p cookie
実行結果:
{"HIZUKE"=>"2007%2F02%2F16%2021%3A47%3A51", "KAISUU"=>"2"}
クッキーの送信
送信するには、Cookieヘッダとして
HIZUKE=2007%2F02%2F16%2021%3A47%3A51;KAISUU=2
を送信してやればいい。
cookie={'HIZUKE'=>'2007%2F02%2F16%2021%3A47%3A51' 'KAISUU'=>2} Net::HTTP.start('www.tohoho-web.com'){|http| response, = http.get '/cgi/wwwcook.cgi',{'Cookie'=>cookie.map{|k,v| "#{k}=#{v}" }.join(';')} print response.body }
Livedoor Clipメモ
ログイン
http://member.livedoor.com/login/indexにユーザー名(livedoor_id)とパスワード(password)をPOSTするとログインできる。
このときに設定されるクッキーを使うことでログイン済みと見なされるので、クッキーを保存しておく必要がある。
成功すると302によってリダイレクトされ、失敗すると200によってエラーページが表示される。
Postkeyの取得
ブックマークを追加するにはpostkeyが必要になる。
このpostkeyは、ログインした状態でhttp://clip.livedoor.com/clip/add?link=http://example.com&title=exampleにアクセスすると得られるHTMLに書いてある。
<input type="hidden" name="postkey" value="xxxxxxxxxx">
追加
http://clip.livedoor.com/clip/addにパラメータをPOSTすることでブックマークを追加することができる。これはGETだとうまくいかない。
成功すると302が帰ってくる。
パラメータ名 | 意味 |
---|---|
postkey(必須) | postkey |
link(必須) | ブックマークするURL |
title(必須) | ブックマークに対するタイトル |
tags | タグ。スペースによって区切る |
notes | コメント |