Разбор JSON из ответа GET при наличии заголовков - PullRequest
4 голосов
/ 19 марта 2012

Я пытаюсь json_decode ответ, который я получаю от запроса GET к моему серверному API, но я получаю пустую строку обратно.Буду ли я прав, предполагая, что, поскольку ответ содержит всю информацию заголовка, с которой JSON-декодер не может справиться?Это полный ответ, который я получаю от моего сервера:

HTTP/1.1 200 OK
Server: nginx/1.0.5
Date: Sun, 18 Mar 2012 19:44:43 GMT
Content-Type: application/json
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: Servlet/3.0; JBossAS-6
Content-Length: 97

{"pid":"162000798ab8481eaeb2b867e10f8849","uuid":"973b8722c75a4cacb9fd2316517587bb"}

Нужно ли удалять заголовки в моем сервлете, прежде чем я отправлю ответ клиенту?

Ответы [ 3 ]

8 голосов
/ 19 марта 2012

Да, json_decode необходимо передать просто данные JSON для декодирования.Поскольку вы используете curl, вы можете просто настроить запрос так, чтобы он не возвращал вам заголовки с чем-то вроде

curl_setopt($ch, CURLOPT_HEADER, false);

Обновление: , если вам нужны заголовки для более ранней обработки, чем приведенный вышене будет сокращать это.Однако вы можете легко удалить их в любой момент, воспользовавшись тем, что между заголовком и телом ответа будет двойной разделитель новой строки.Используя explode, как это, вы изолируете тело:

list(,$body) = explode("\n\n", $response, 2);
0 голосов
/ 28 июля 2017

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

curl_setopt($handle, CURLOPT_HEADER, false);

Чтобы использовать любую информацию в заголовке, вы можете использовать функцию curl_getinfo. Например, чтобы получить код статуса http, используйте:

curl_getinfo($handle, CURLINFO_HTTP_CODE)

Дополнительные параметры см. В руководстве по получению информации здесь: http://php.net/manual/en/function.curl-getinfo.php

0 голосов
/ 22 января 2014
json_decode(@file_get_contents('php://input'), true)
...