Hatena::ブログ(Diary)

higebu325の日記

2009-01-29 JavaでAtom APIでのはてなブックマークPOSTが403 Forbidden

はじめまして。

今回、JavaはてブAtom APIを使っていて気づいたことがあるので、はてなダイアリーに投稿しました。

完全に自分用のメモですね。

タイトル通り、JavaはてブAtom APIにPOSTするとアクセス拒否されてしまっていたんですが、解決しました。

具体的なエラーは、Atom APIでのはてなブックマークPOSTが403 Forbiddenに載っているものと同じです。

原因は違うかもしれませんが、他にも似たようなエラーが起きている人がいます。

はてなブックマークAtomAPIで403


原因はUser-Agentが間違っていたせいでした。

具体的には「Java/バージョン」としていたんですが、正しくは「Sun Java/バージョン」でした。

そんなことで8時間くらい費やしてしまいました。

ちなみに、http://b.hatena.ne.jp/dumpにGETで全件取得するときはUser-Agentを指定しなくてもいけます。

どうやら、POSTのときはUser-Agentのチェックが厳しいようです。


なんでこんなことになったのかというと、

実はJavaで作る前にRubyで作っていたんですが、そのときは問題なく動いていていました。

そのときはUser-Agentが「Ruby/バージョン」でできてたので、Javaでは「Java/バージョン」でいいのかと思ってしまっていたのです。

しかし、よく見てみるとRubyのときとJavaのときの違いはUser-Agentだけだったんです。

それで、JavaでもUser-Agentを「Ruby/1.8.6」としてみたら、成功してしまったので、JavaのときのUser-Agentは「Java/バージョン」ではないと気づき、

適当に「Sun」を付けてみたら成功しました。


追記:User-Agentが空のときもアクセス拒否されます。


参考URL

はてブAPIについて

http://b.hatena.ne.jp/help/api

Rubyでの実装

http://d.hatena.ne.jp/toward/20051225/ruby_hatena_wsse

http://d.hatena.ne.jp/toward/20051225/ruby_hatena_get_all_bookmarks

Javaでの実装

http://yohei-y.blogspot.com/2005/04/java-atomapi.html

http://d.hatena.ne.jp/j130s/20080211/p1