1

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"
4

2 に答える 2

1

私は自分の問題を解決するために実行する必要があるとは信じていなかった何かを試すことにしたところ、それが解決策であることが判明しました.

以下の作品:

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"

微妙な違い、つまり、JSON 文字列を (一重引用符ではなく) 二重引用符でカプセル化し、JSON 文字列内の二重引用符をエスケープしました。

これは、Windows のみの問題である可能性があります。

于 2013-07-29T19:42:50.810 に答える