我使用PHP-cURL(在WP-Plugin中)从我的ZF2应用程序获取JSON响应。
我有两个要求。
第一个工作正常,我只是把json_encoded数组拿回来。但是当我发送GET请求时,响应看起来像(一切都是本地的):
插件。php:16:string'HTTP/1.1 200 OK Date:Fri,2016年11月18日13:14:20 GMT服务器:Apache/2.4.23(Win32)OpenSSL/1.0.2h php/7.0.9 X-Powered-By:php/7.0.9 Set Cookie:PHPSESSID=gb99a214u3rlc125ca4rscd441;expires=2016年11月18日星期五23:14:20 GMT;最大年龄=36000岁;path=/Expires:Thu,1981年11月19日08:52:00 GMT缓存控制:无存储,无缓存,必须重新验证Pragma:无缓存传输编码:分块内容类型:application/json;字符集=utf-8
{"data":{"Machines":[{"ID": 2590978,"Refnummer": 1000869,"Maschinentyp":"504"'...(长度=41759)
为什么我会得到完整的回复标题?如果我现在尝试对它进行json_解码,我必须事先去掉所有的头文件,我能避免吗?
这就是我生成响应的方式
$server = call_user_func($this->oauthServerFactory, $this->params('oauth'));
if (!$server->verifyResourceRequest(OAuth2Request::createFromGlobals())) {
// Not authorized return 401 error
$this->getResponse()->setStatusCode(401);
return $this->getResponse();
}
//GET DATA
$jsonArray = array();
$jsonArray['Machines'] = array();
$jsonMachinesArray = array();
foreach ($machines as $machine)
{
//ORDER DATA
}
return new JsonModel(array(
'data' => $jsonArray
));
在这里我创建了请求:
$endpoint = $url;
//var_dump($access_token);
$headers = array(
'Content-Type: application/json',
'Authorization: Bearer '.$access_token,
);
$curl = curl_init($endpoint);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
echo "Performing Request...<br>";
$json_response = curl_exec($curl);
//var_dump($json_response);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// evaluate for success response
if ($status != 200) {
throw new Exception("Error: call to URL $endpoint failed with status $status, response $json_response, curl_error " . curl_error($curl) . ", curl_errno " . curl_errno($curl) . "\n");
}
curl_close($curl);
return $json_response;
这似乎与客户端实现中的curl部分有关。请查看PHP能否cURL在单个请求中检索响应标头和正文?。
我认为应该将CURLOPT_HEADER设置为false。(https://curl.haxx.se/libcurl/c/CURLOPT_HEADER.html)