我正在尝试使用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');
答案 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());