ZF2 RESTful JsonModel

时间:2016-11-18 13:38:54

标签: php rest curl zend-framework2

我使用PHP-cURL(在WP-Plugin中)从我的ZF2应用程序获取JSON响应。

我必须做2个请求。

  1. 的OAuth
  2. 获取请求
  3. 第一个工作正常我只是得到了json_encoded数组。 但是当我发送GET请求时,响应看起来像(一切都是本地的):

      

    plugin.php:16:string' HTTP / 1.1 200 OK日期:星期五,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;到期= 2016年11月18日星期五   23:14:20 GMT;最大年龄= 36000; path = / Expires:Thu,1981年11月19日08:52:00   GMT Cache-Control:无存储,无缓存,必须重新验证Pragma:   no-cache Transfer-Encoding:chunked Content-Type:application / json;   字符集= UTF-8

         

    {"数据" {"机械和#34;:[{" ID":2590978," Refnummer":1000869,&#34 ; Maschinentyp":" 504"' ...(长度= 41759)

    为什么我会获得完整的响应标头? 如果我现在尝试json_decode它我必须事先摆脱所有标题的东西,我可以避免吗?

    这就是我生成响应的方式

    $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;
    

1 个答案:

答案 0 :(得分:1)

这似乎与客户端实现中的curl部分有关。请查看Can PHP cURL retrieve response headers AND body in a single request?

我认为应该将CURLOPT_HEADER的行设置为false。 (https://curl.haxx.se/libcurl/c/CURLOPT_HEADER.html