うーん、アメブロに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
#そもそもアメブロ使うなって話かもしれませんが…(^^;