メニュー 閉じる

Blog

Ameba試行錯誤(失敗)

うーん、アメブロにPerlから投稿したいけど、WSSE認証が通らない。。
たぶんPasswordDigestの生成が違っているのだと思うけど…
とりあえず、はてなフォトライフAtomAPIのサンプルコードをベースにして、
下記のようにパスワードをmd5したあとで連結するようにAmeba向け改造をしてみたけど駄目でした。

my $nonce = sha1(sha1(time() . {} . rand() . $$));
my $now = DateTime->now->iso8601 . ‘Z’;
my $digest = encode_base64(sha1($nonce . $now . md5($ameba_passwd) || ”), ”);
my $credentials =
    sprintf(qq(UsernameToken Username="%s",PasswordDigest="%s",Nonce="%s",Created="%s"),
            $ameba_id, $digest,  encode_base64($nonce, ”), $now);

my $req = HTTP::Request->new(GET => $atomURI);
$req->header( Accept => ‘application/x.atom+xml, application/xml, text/xml, */*’);
$req->header( ‘X-WSSE’ => $credentials );

print "REQUEST: ".$req->as_string;
print "RESPONSE: ".LWP::UserAgent->new->request($req)->as_string;

という感じでやってみたのだけど、駄目。
レスポンスは下記のよーなもの。

HTTP/1.1 401 Unauthorized
Connection: close
Date: Sat, 03 Jan 2009 15:06:49 GMT
Server: Apache
Content-Length: 83
Content-Type: application/x.atom+xml
Client-Date: Sat, 03 Jan 2009 15:06:49 GMT
Client-Peer: xxx.xxx.xxx.xxx:80
Client-Response-Num: 1
Client-Warning: Missing Authenticate header
Set-Cookie: BIGipServerPool_comment=xxxxxxxxxx.xxxxx.xxxx; expires=Sun, 04-Jan-2009 15:06:49 GMT; path=/

<?xml version="1.0" encoding="UTF-8">
<error>X-WSSE authentication required</error>

こんな感じで冷徹に弾かれました(^^;
あちこち調べたけど他にサンプルコードも無いのでちょっと諦めかけ。。

nonceはなんでもいいはずだし、日付はDateTimeから貰っているから間違ってるとするとDigestの生成部分か、パスワードそのもの?
パスワードは何度も確認したので、やはりコードが違うのでしょうね。

どなたか成功した方いませんかね(苦笑)
とかいって、こんな他力本願では駄目ですねorz

#そもそもアメブロ使うなって話かもしれませんが…(^^;