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

将发送API密钥的CURL命令转PHP CURL时出现403错误如何解决

问题根源

你当前代码的核心错误是CURLOPT_POSTFIELDS配置与请求头声明的格式不匹配:

  • 原始CURL命令使用application/x-www-form-urlencoded格式提交参数,参数结构为key=YOUR_KEY&secret=YOUR_SECRET的键值对字符串
  • 你的代码里给CURLOPT_POSTFIELDS传的是JSON格式字符串,服务端按照表单格式解析时无法读取到正确的key、secret参数,因此返回403未授权错误。

修正后的代码

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.example.co.uk/authenticate",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_POST => true, // 此处替换原来的CURLOPT_CUSTOMREQUEST配置,POST请求写法更规范
  // 用http_build_query生成符合x-www-form-urlencoded格式的参数字符串
  CURLOPT_POSTFIELDS => http_build_query([
    "key" => "MYKEY",
    "secret" => "MYSECRET"
  ]),
  CURLOPT_HTTPHEADER => array(
    "content-type: application/x-www-form-urlencoded"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

补充说明

  • 也可以直接手动拼接字符串"key=MYKEY&secret=MYSECRET"赋值给CURLOPT_POSTFIELDS,效果一致,用http_build_query()可以自动处理参数URL编码,避免手动拼接出现格式错误
  • 如需排查请求细节,可在curl配置中添加CURLOPT_VERBOSE => true,会打印完整的请求交互日志,方便定位参数发送问题

内容的提问来源于stack exchange,提问作者Harry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:45:05