如何在cURL GET请求中发送参数数组?发送后接收不到参数如何解决?
问题原因及修复方案
存在的问题
- 变量拼写错误:初始化cURL时使用的URL变量是
$product_data_url,后续调用curl_setopt设置CURLOPT_URL时错写为$product_datat_url,多了1个字母t,会直接导致请求地址异常。 - GET请求传参逻辑错误:
CURLOPT_POSTFIELDS是用于POST、PUT等需要携带请求体的请求的配置项,标准GET请求的参数需要拼接在URL的查询字符串部分,绝大多数服务端不会解析GET请求的请求体内容,因此你写的参数根本无法被目标端识别。 - 请求头配置错误:你设置了
Content-Type: application/json请求头,但实际参数是用http_build_query生成的表单格式,且GET请求本身无请求体,该头配置不符合实际传输内容,可能导致服务端解析逻辑异常。
修正后代码
$params = []; foreach($product_data->params as $param) { array_push($params, $param); } // 拼接GET参数到URL末尾 $queryStr = http_build_query($params); $finalUrl = $product_data_url . (strpos($product_data_url, '?') !== false ? '&' : '?') . $queryStr; $curl = curl_init($finalUrl); $headers = [ 'Authorization: Bearer ' . $token, ]; curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $resp = curl_exec($curl); if($resp === false) { echo "Error Number:".curl_errno($curl)."<br>"; echo "Error String:".curl_error($curl); } curl_close($curl); return $resp;
补充说明
如果你的服务端有特殊逻辑要求GET请求同时携带JSON格式的请求体,可以保留Content-Type: application/json头,同时把CURLOPT_POSTFIELDS的参数改为json_encode($params),但该用法不符合HTTP规范,仅部分服务端会兼容处理。
内容的提问来源于stack exchange,提问作者Muhammad AbuBaker
相关产品推荐
相关产品推荐

