我正在尝试将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中的标头?
答案 0 :(得分:8)
是的,json_decode
必须传递只是要解码的JSON数据。由于您使用的是curl,因此您可以简单地将请求配置为不使用类似
curl_setopt($ch, CURLOPT_HEADER, false);
更新:如果您需要用于早期处理的标题,则上述内容不会将其删除。但是,您可以通过利用响应的标题和正文之间存在双换行“分隔符”这一事实,随时轻松删除它们。像这样使用explode
将隔离身体:
list(,$body) = explode("\n\n", $response, 2);
答案 1 :(得分:0)
json_decode(@file_get_contents('php://input'), true)
答案 2 :(得分: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