- 2009-05-11 (月) 4:59
- プログラミング
前回の続き。
CFURLRef theURL = CFURLCreateWithString(kCFAllocatorDefault, CFSTR("http://mixi.jp/login.pl"), NULL);
mixiのログインをやってみる。
CFHTTPMessageRef theRequest = CFHTTPMessageCreateRequest(kCFAllocatorDefault, CFSTR("POST"), theURL, kCFHTTPVersion1_1);
POSTを指定してやる。
CFDataRef thePostData = CFStringCreateExternalRepresentation( NULL, CFSTR("next_url=%2Fhome.pl&email=メアド%40ドメイン.org&password=パスワード&x=71&y=14"), CFStringGetSystemEncoding(), '?');
CFStringCreateExternalRepresentation()を使ってCFDataRefをCFStringRefから作る。使い回すわけでもないのでCFSTR()で作っちゃう。後ろのx=71とかy=14って何だろう?エンコーディングはCFStringGetSystemEncoding()でよい。最後の’?'は解釈できない文字を?で置き換えるという意味らしい。
CFHTTPMessageSetBody(theRequest, thePostData);
POSTデータをくっつける。あとは前回と同じでPOSTできる。とりあえずmixiがcookieを返すので、あとは色々できそうだ。check.plがいきなりリダイレクトするので、その処理もやらないと。あと、ステータスコードも取得しないと。
Rubyのリファレンスページにあるリダイレクトのやり方。
def fetch( uri_str, limit = 10 )
# 適切な例外クラスに変えるべき
raise ArgumentError, 'http redirect too deep' if limit == 0
response = Net::HTTP.get_response(URI.parse(uri_str))
case response
when Net::HTTPSuccess then response
when Net::HTTPRedirection then fetch(response['location'], limit - 1)
else
response.error!
end
end
print fetch('http://www.ruby-lang.org')
なるほど、上限を決めて再帰すればいいのね。
- Newer: Good luck new year!
- Older: CFNetworkでHTTP GET
Comments:0
Trackback+Pingback:0
- TrackBack URL for this entry
- http://blog.neoneet.jp/2009/05/cfnetwork%e3%81%a7http-post/trackback/
- Listed below are links to weblogs that reference
- CFNetworkでHTTP POST from 週刊(月刊?)プレカリアート