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

PHP使用CURL发送POST请求返回invalid_request但Postman正常如何解决

PHP CURL POST请求异常排查修复方案

核心问题点

  • Content-Type拼写错误:代码中设置的Content-Type值为application/x-www-form-urlencode,正确标准值为application/x-www-form-urlencoded,末尾缺少字母d,服务端无法正确解析请求体格式,直接返回invalid_request错误。
  • POST参数格式冲突:CURLOPT_POSTFIELDS直接传入数组时,PHP CURL会自动将请求头Content-Type覆盖为multipart/form-data,与你手动设置的x-www-form-urlencoded格式冲突,导致参数解析失败。
  • 认证配置冲突:同时配置了CURLOPT_HTTPAUTH => CURLAUTH_BASIC(CURL内置Basic认证逻辑)和手动添加Authorization请求头,两套认证逻辑冲突会导致认证信息异常。
  • POST请求配置不规范:使用CURLOPT_CUSTOMREQUEST => "POST"自定义请求方法,兼容性不如标准CURLOPT_POST => true配置,部分服务端可能识别异常。

修复后的完整代码

$url = "https://..................."; 
$authorization = ""; //base64 string TE1TQXBpOkxNUContinue...=
$curl = curl_init();
$auth_data = array(
  'scope'   => 'LMSApi LMSRead',
  'grant_type'      => 'client_credentials'
);
// 数组转urlencoded格式字符串
$post_fields = http_build_query($auth_data);
$ops = array(
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_SSL_VERIFYHOST => false,
  CURLOPT_SSL_VERIFYPEER => false,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  // 改用标准POST配置
  CURLOPT_POST => true,
  CURLOPT_POSTFIELDS => $post_fields,
  // 移除内置Basic认证配置,使用手动设置的请求头
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/x-www-form-urlencoded',
    'Authorization: Basic '.$authorization
  )
);
curl_setopt_array($curl, $ops);
$response = curl_exec($curl);
// 调试时可打开下面两行查看请求详情
// var_dump(curl_getinfo($curl));
// var_dump(curl_error($curl));
var_dump($response);
curl_close($curl);

可选调试方案

如果修复后仍存在异常,可调用curl_getinfo($curl)打印请求的完整信息,包括实际发送的请求头、响应状态码、请求耗时等参数,对比Postman的请求参数逐一核对即可定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:06:03