Скручивать ошибки PHP с помощью rackspace api

1

Я пытаюсь создать токен с API-интерфейсом Cloud Identity из Rackspace (https://developer.rackspace.com/docs/cloud-identity/v2/developer-guide/#generate-an-authentication-token)

Это запрос, который мне нужен:

$ curl https://identity.api.rackspacecloud.com/v2.0/tokens  \
-X POST \
-d '{"auth":{"RAX-KSKEY:apiKeyCredentials":{"username":"yourUserName","apiKey":"yourPassword"}}}' \
-H "Content-type: application/json" | python -m json.tool

И вот как я пытаюсь это сделать:

<?php
$url = 'https://identity.api.rackspacecloud.com/v2.0/tokens';
$apiKey = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$data = "'{\"auth\":{\"RAX-KSKEY:apiKeyCredentials\":{\"username\":\"XXXXXXXX\",\"apiKey\":\"$apiKey\"}}}'";
$headers = array();
$headers[0] = '"Content-Type: application/json" | python -m json.tool';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_NONE);
$response = curl_exec($ch);
$info = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo($info);
?>

И я получаю следующее: 415 {"unsupportedMediaType": {"code": 415}}

Когда я изменяю заголовок с

$headers[0] = '"Content-Type: application/json" | python -m json.tool'; 

в

$headers[0] = 'Content-Type: application/json | python -m json.tool';

Я получаю это

И, наконец, когда я изменяю заголовок на этот:

$headers[0] = 'Content-Type: application/json';

Я получаю этот код ошибки: 400 {"badRequest": {"code": 400, "message": "Invalid json request body"}}

Правильно ли я это делаю? Заранее спасибо.

  • 0
    Я бы настроил $data как массив, а не строку. $data = array( 'username' => 'XXXXXX' )
  • 0
    наконец это сработало. Кажется, что вся проблема была строкой $ data. {
Теги:
curl
rackspace

1 ответ

0

Есть ли причина, почему вы не используете PHP SDK? Это делает так много проще.

Вам нужно будет изменить свой PHP на:

<?php
$url = 'https://identity.api.rackspacecloud.com/v2.0/tokens';
$username = 'foo';
$apiKey = 'bar';

$data = <<<EOT
{"auth": {"RAX-KSKEY:apiKeyCredentials":{"username":"$username","apiKey":"$apiKey"}}}
EOT;

$headers = array('Content-Type: application/json');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_NONE);

$response = curl_exec($ch);

echo curl_getinfo($ch, CURLINFO_HTTP_CODE);
  • 0
    ну не совсем, попробую с PHP SDK. Спасибо за вашу помощь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню