Не могу декодировать ответ с помощью json_decode

168
27 марта 2018, 02:30

Работаю с api, отправляю логин, пароль, несколько значений. В ответ получаю заголовок, тело. В теле данные в формате json.

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 49282
Content-Type: application/json; charset=utf-8
...продолжение заголовка...
{ "PriceModels": [ { "ArticleId": 886110, "ArticleCode": "6117302", "TradeMarkId": 10204, "TradeMarkName": "GIRLING", "Description": "Текст", "ArticlePriceInfo": [ { "Price": 2528.58, "Qty": 10.0, "DeliveryTerm": 5, "Multiplicity": 1, "City": "", "OfferKey": "SO421уу1==" }, { "Price": 2834.94, "Qty": 2.0, "DeliveryTerm": 4, "Multiplicity": 1, "City": "", "OfferKey": "98Iiууу==" }

Если писать так:

...
$json = curl_exec($ch);
curl_close($ch);
echo $json;
?>

то ответ приходит, как в примере указанном выше. Если добавить

$obj=json_decode($json);
echo $obj;

То ответ пустой.

Весь код вместе с json_decode:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $ch_url."/login");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, $Login.':'.$Password);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, "ApiKey=".$ApiKey);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$response = curl_exec($ch);
$headers = substr($response, 0, curl_getinfo($ch, CURLINFO_HEADER_SIZE));
$headers = explode("\r\n", $headers);
foreach ($headers as $header) {
if (strpos($header,"Token:")!==false) {
$token = array($header);
}
}
curl_setopt($ch, CURLOPT_HTTPHEADER,$token);
curl_setopt($ch, CURLOPT_URL, $ch_url);
curl_setopt($ch, CURLOPT_POST,false);
$json = curl_exec($ch);
$obj=json_decode($json);
curl_close($ch);
echo $obj;
Answer 1

Вы получаете ответ вместе с заголовками. Понятно, что такую строку Вы не распарсите. Вам нужно либо вручную выкусить само тело сообщения, либо перед вторым запросом попросить не показывать заголовки

curl_setopt($ch, CURLOPT_HEADER, 0);
READ ALSO
Безопасность API запросов с client-secret на Laravel

Безопасность API запросов с client-secret на Laravel

Всем приветДелаю API на Laravel 5

203
Бесконечная работа бота [PHP]

Бесконечная работа бота [PHP]

Пишу бота по vk api для личных сообщенийХотелось бы узнать как можно сделать бесконечную работу бота

194
Сделал скрипт, он работает. Теперь хочу сделать то же самое, но при помощи ООП

Сделал скрипт, он работает. Теперь хочу сделать то же самое, но при помощи ООП

Друзья, хочу заранее предупредить, к изучению ООП я только что подошел, не судите строго

164
Как получить значение data, которое передает php на js

Как получить значение data, которое передает php на js

Возникла такая проблема, мне нужно следующее: 1PHP передает значение на js в data 2

156