PHP初心者です。

はてなブックマークへの投稿をAPIを利用してPHPで実装しようと思っているのですが、
うまくいきません。

認証は通っているのですが、400 Bad Requestが返ってきてしまいます。
XMLの投げ方が悪いのでしょうか?
文法が間違っているのでしょうか?

****************************************************
<?php
require_once 'HTTP/Client.php';

$url="http://b.hatena.ne.jp/atom/post";

$http = new HTTP_Client();

$http->setDefaultHeader('X-WSSE','XXXX');

$xml = "<entry xmlns=\"http://purl.org/atom/ns#\">\n"
."<title>dummy</title>\n"
."<link rel=\"related\" type=\"text/html\" href=\"http://www.example.com/\" />\n"
."<summary type=\"text/plain\">サンプルコメントです</summary>\n"
."</entry>\n";

$http->post($url, $xml);

$response = $http->currentResponse();

print $response['code']."\n";
print $response['headers']."\n";
print $response['body']."\n";

?>

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/12/25 14:27:08
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:goodvn No.1

回答回数228ベストアンサー獲得回数18

ポイント60pt

WSSE を生成せず固定で書かれているように見受けられますが,Nonce,Created,パスワードから動的に生成するものですので,このあたりのコードを見直してみてください

id:sensibility

回答ありがとうございます。

下記内容を付加して実行しましたが同じ結果でした。(400 Bad Request)

本文にもありますが、認証自体は成功していると思います。

*****************************************************

$user = 'userid';

$pass = 'password';

$nonce = sha1(md5(time().rand()), TRUE);

$created = date('Y-m-d\TH:i:s\Z');

$digest = base64_encode(sha1($nonce . $created . $pass, TRUE));

$wsse_header = sprintf('UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"',$user, $digest, base64_encode($nonce), $created);

$http->setDefaultHeader('X-WSSE',$wsse_header);

2008/12/25 12:25:26

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません