ответ curl представляет собой строку вместо массива

#php #arrays #curl

#php #массивы #curl

Вопрос:

Я использую следующие команды, чтобы получить ответ Curl от Api:

   $curl = curl_init();

  curl_setopt_array($curl, array(
  CURLOPT_URL => "https://{api-url_goed_here}/api/v2/token",
  CURLOPT_RETURNTRANSFER => 1,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"grant_type": "password","client_id": "'.$client_id.'","username":"'.$username.'","password":"'.$user_password.'"}',
  CURLOPT_HTTPHEADER => array(
    "content-type: application/json"
  ),
));

$responseArray = curl_exec($curl);
$err = curl_error($curl);
  

Я получаю ответ. Это выглядит как массив, когда я использую print_r($responseArray). Но когда я использую var_dump($responseArray), я вижу, что на самом деле это строка:

     string(384) "Array
(
    [access_token] => #token_is_here
    [token_type] => bearer
    [expires_in] => 3600
    [refresh_token] => #refresh_token_is_here
    [uid] => 7
    [info] => Array
        (
            [name] => #name_is_here
            [code] => #some_code
            [email] => #some_mail_address
        )
    [policy] => Array
        (
            [write_hours] => 1
        )
)
"
  

Как мне предотвратить получение строки в качестве ответа? Я стремлюсь получить массив, потому что я хочу извлечь access_token

Комментарии:

1. Похоже, что сервер генерирует выходные данные через print_r() , когда он должен использовать echo json_encode() . Возможно, разработчики API случайно оставили там какой-то отладочный код?

Ответ №1:

В качестве временного решения вы можете использовать функцию print_r_reverse из php.net комментарии к документации print_r. Просто добавьте эту функцию где-нибудь в свой код и получите доступ к токену следующим образом:

 $response = curl_exec($curl);
$responseArray = print_r_reverse($response);
echo $responseArray['token'];
  

Комментарии:

1. Это делает свое дело, спасибо! (с ['access_token'], если быть точным)

Ответ №2:

В конечном счете, ответ Curl не имеет смысла для PHP. Это просто набор строк, возвращаемых сервером.

Просто убедитесь, что вы можете обработать то, что возвращается. И если у вас есть какой-либо контроль над ним, измените возвращаемое значение так, чтобы Curl возвращал то, что вы хотите в скрипте, который выполняется https://{api-url_goed_here}/api/v2/token .

Ответом мог быть исходный код example.com если вы укажете на это там.

Ответ №3:

У меня был контакт с разработчиком API. Как выясняется: я должен добавить "accept: application / json" в заголовок, чтобы получить форматированный ответ. В противном случае я просто получаю дамп результата print_r.