Guzzle使用request()发起GET请求时如何构造符合要求的query参数
问题根因
你当前直接把数组赋值给query下的paginator_data字段时,Guzzle会默认调用PHP原生http_build_query处理多维数组,生成的查询字符串格式为paginator_data[page]=1&paginator_data[page_size]=10,和接口期望的「JSON字符串编码后的值」格式不匹配。
解决方案
先对paginator_data对应的数组做JSON序列化,再赋值给query参数即可,Guzzle会自动对JSON字符串做URL编码,不需要你手动处理编码逻辑。
正确代码如下:
$result = $client->request( 'GET', 'cart/current/get-items', [ 'headers' => [ 'X-AUTH-API-TOKEN' => 'Bearer ' . $tokens->token ], 'query'=>[ // 先序列化为JSON字符串,Guzzle会自动做URL编码 'paginator_data' => json_encode([ 'page'=>1, 'page_size' => 10 ]) ] ] );
注意:不要手动对
json_encode的结果做URL编码,Guzzle的query参数默认会对所有值做一次URL编码,手动编码会导致二次编码,接口拿到的内容无法正常解析。
效果验证
上述代码生成的原始查询字符串为:
paginator_data=%7B%22page%22:1,%22page_size%22:10%7D
和你抓包得到的前端请求格式完全一致,接口侧可以正常通过json_decode拿到解析后的分页参数。
内容的提问来源于stack exchange,提问作者Alpha Kenny Buddy
相关产品推荐
相关产品推荐

