#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.