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

PHP Curl调用API时HTTP头与POST数据冲突问题求助

PHP Curl请求接口:添加Content-Type则参数丢失,不添加则Token未找到的解决办法

问题核心分析

你的问题根源是请求头Content-Type与实际参数格式不匹配,同时存在Token传递有效性的潜在问题:

  1. 未添加Content-Type时,curl默认使用application/x-www-form-urlencoded格式,但接口返回"Token not found",大概率是$token变量为空,或是接口仅在指定Content-Type下解析Authorization头;
  2. 添加application/json头但参数是表单格式字符串时,接口会尝试解析JSON请求体,自然无法识别参数,返回"No Request"。

方案1:接口期望表单格式(application/x-www-form-urlencoded)

明确设置对应Content-Type,同时确保Token有效:

$curl = curl_init();
// 参数可以用字符串或数组,curl会自动处理表单编码
$params = "action=start_day_activity&woid=23";
// 也可使用数组:$params = ['action' => 'start_day_activity', 'woid' => 23];
$headers = [
    "Content-Type: application/x-www-form-urlencoded",
    "Authorization: Bearer $token"
];

// 先校验Token有效性
if(empty($token)) {
    die("Token is empty");
}

curl_setopt($curl, CURLOPT_URL, $api_url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

$result = curl_exec($curl);
// 可选:查看请求详情排查问题
// var_dump(curl_getinfo($curl));
curl_close($curl);

方案2:接口期望JSON格式

将参数转为JSON字符串,配合application/json请求头:

$curl = curl_init();
// 把参数转为JSON格式
$params = json_encode([
    'action' => 'start_day_activity',
    'woid' => 23
]);
$headers = [
    "Content-Type: application/json",
    "Authorization: Bearer $token"
];

// 校验Token和JSON转换有效性
if(empty($token)) {
    die("Token is empty");
}
if(json_last_error() !== JSON_ERROR_NONE) {
    die("JSON encode failed");
}

curl_setopt($curl, CURLOPT_URL, $api_url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

$result = curl_exec($curl);
curl_close($curl);

额外排查点

  • 打印$token确认值不为空,避免传递无效的Authorization头;
  • 用curl_getinfo($curl)查看实际发送的请求头,确认Content-Type和Authorization是否正确;
  • 核对接口文档,明确要求的请求格式(表单/JSON)和Token解析规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:05:30