【问题标题】:Guzzle and Stack Exchange API, parsing error "JSON_ERROR_UTF8"Guzzle 和 Stack Exchange API,解析错误“JSON_ERROR_UTF8”
【发布时间】:2014-06-30 00:59:09
【问题描述】:

我正在尝试使用 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 创建的有效 URL is correct:如果您在浏览器中打开该链接,您会发现它工作正常并返回请求的数据。

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

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

再次阅读documentation后,我相信请求被压缩并且我没有传递适当的内容头。如果是这样,您能否告诉我应该传递哪个标头以获得正确的响应?

【问题讨论】:

  • 我目前使用的是PHP 5.5.3版本
  • 如果您使用wireshark 并查看确切的请求和响应怎么办?
  • 尝试为 mac os 下载和安装wireshark,但没有响应。

标签: php guzzle


【解决方案1】:

好的,下面的代码对我有用。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 2017-12-13
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多