Rackspace Cloud Services で認証を実行しようとしています。基本的には、JSON 文字列をhttps://identity.api.rackspacecloud.com/v2.0/tokensに POSTし、応答で JSON の結果を受け取る必要があります。
ただし、これには問題があります。つまり、PHP では機能しますが、コマンド ラインから CURL を使用すると機能しません。
コマンドラインでこれを行うと:
curl -s https://identity.api.rackspacecloud.com/v2.0/tokens -X POST -d '{"auth":{"RAX-KSKEY:apiKeyCredentials":{"username":"<my_username>", "apiKey":"<my_apikey>"}}}' -H "Content-Type: application/json"
動作しません。つまり{"badRequest":{"code":400,"message":"JSON Parsing error"}}
、応答として受け取ります。<my_username>
と<my_apikey>
は、Rackpace Cloud Credentials に従って、私のユーザー名と API キーであることを指摘しておく必要があります。
しかし、PHPコードで次のことを行うと:
$post_data = '{"auth":{"RAX-KSKEY:apiKeyCredentials":{"username":"<my_username>", "apiKey":"<my_apikey>"}}}';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://identity.api.rackspacecloud.com/v2.0/tokens');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($post_data))
);
$result = curl_exec($ch);
それは機能し、想定どおりに JSON データを取得します。
PHP は機能しているのに、コマンド ラインの CURL が機能しない理由を知りたいです。ありがとう!
PS Windows 7 PC を使用しています。
編集
また、JSON 文字列を取得してファイルに入れ、次の操作を行った場合にも機能します。
curl -s https://identity.api.rackspacecloud.com/v2.0/tokens -X POST -d @myfile.json -H "Content-Type: application/json"