Guzzle和Stack Exchange API,解析错误“JSON_ERROR_UTF8”

时间:2014-06-30 00:59:09

标签: php guzzle

我正在尝试使用Guzzle使用Stack Exchange API。我遇到了一个无法获得JSON响应的问题:解析它时显然会失败。

这是我的代码:

$client = new GuzzleHttp\Client();
$parameters = ['pagesize'=>'2','order'=>'desc','sort'=> 'activity','q'=>'laravel eloquent','site'=>'stackoverflow'];
$response = $client->get('http://api.stackexchange.com/2.2/search/advanced',['query' => $parameters ]);

Guzzle创建的有效网址is correct:如果您在浏览器中打开链接,您会看到它正常工作并返回所请求的数据。

但是,当尝试使用$response->json()访问JSON时,Guzzle失败并出现此错误:

  

GuzzleHttp \ Exception \ ParseException
  无法解析JSON数据:JSON_ERROR_UTF8 - 格式错误的UTF-8字符,可能编码错误

再次阅读documentation后,我认为该请求已被压缩,我没有传递相应的内容标题。如果是这样的话,你可以告诉我应该通过哪个标题来获得正确的答案吗?

我尝试添加以下两行代码,但它仍然失败,因为API正在返回一个JSON对象。

$response->addHeader('Accept-Encoding','GZIP');
$response->addHeader('Content-Type','application/json');

1 个答案:

答案 0 :(得分:2)

好的以下代码对我有用。

 $client = new GuzzleHttp\Client();
    $parameters = ['pagesize'=>'2','order'=>'desc','sort'=> 'activity','q'=>'laravel eloquent','site'=>'stackoverflow'];
    $params = http_build_query($parameters);
    $request = $client->createRequest('GET', 'http://api.stackexchange.com/2.2/search/advanced?'.$params);
    $request->addHeader('Accept-Encoding','GZIP');
    $request->addHeader('Content-Type','application/json');
    $response = $client->send($request);
    var_dump($response->json());