You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:36:03