我正在尝试对 Rackspace 云服务执行身份验证。基本上,这涉及将 JSON 字符串发布到https://identity.api.rackspacecloud.com/v2.0/tokens,然后在响应中接收 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"