4

我正在尝试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"}

在将响应发送给客户端之前,是否需要删除 servlet 中的标头?

4

3 回答 3

8

是的,json_decode必须只传递JSON数据才能解码。由于您使用的是 curl,您可以简单地将请求配置为不将标头返回给您,例如

curl_setopt($ch, CURLOPT_HEADER, false);

更新:如果您需要更早处理的标题,那么上述内容不会削减它。但是,您可以随时轻松地删除它们,方法是利用响应的标题和正文之间将有一个双换行符“分隔符”这一事实。像这样使用explode将隔离身体:

list(,$body) = explode("\n\n", $response, 2);
于 2012-03-18T20:03:01.313 回答
0
json_decode(@file_get_contents('php://input'), true)
于 2014-01-22T08:54:01.677 回答
0

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

于 2017-07-28T04:38:08.227 回答