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

PHP中向第三方服务器发送带Header的PUT请求失败,求排查

问题分析与解决方案

你遇到的核心问题是你需要发送PUT请求,但当前代码配置的是POST请求,这就是请求未按预期定向到目标URL对应处理逻辑的关键原因。另外还有几个细节需要调整,让我们一步步修正:

主要问题点

  • 你明确需要发送PUT请求,但代码里用了CURLOPT_POST参数,这会强制使用POST方法,而非PUT
  • 缺少必要的HTTP头信息,可能导致服务器无法正确识别PUT请求的参数格式

修正后的代码

$pay_time = '01-01-2020';
$url = 'https://demo.sparktbd.com/api/response.php';
$fields = array(
    'payment_status' => '0',
    'payment_datetime' => $pay_time,
);
$fields_string = http_build_query($fields);

$ch = curl_init();

// 核心:设置PUT请求方法
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
// 传递PUT请求的参数
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);

// 配置HTTP头,添加必要的格式标识
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "user: sohel",
    "pass: Sohel@123",
    "Content-Type: application/x-www-form-urlencoded",
    "Content-Length: " . strlen($fields_string)
));
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 执行请求并捕获错误
$result = curl_exec($ch);
if(curl_errno($ch)){
    echo 'Curl调试错误: ' . curl_error($ch);
}
curl_close($ch);

var_dump($fields_string);
var_dump($result); // 建议添加,查看服务器返回的响应内容

关键修改说明

  1. 替换POST为PUT方法:移除CURLOPT_POST, count($fields)这个POST专属配置,改用CURLOPT_CUSTOMREQUEST, "PUT"来指定PUT请求方法——CURLOPT_POST会覆盖自定义请求方法,所以必须删除。
  2. 添加必要的HTTP头:加上Content-Type和Content-Length头,帮助目标服务器正确识别你发送的表单数据格式,很多后端接口依赖这些头来处理请求体。
  3. 增加错误调试:添加curl错误捕获代码,方便你排查后续可能出现的请求问题。

额外提醒

生产环境中不建议关闭CURLOPT_SSL_VERIFYHOST,这会带来SSL安全验证漏洞,应该配置正确的SSL证书路径来完成验证。

内容的提问来源于stack exchange,提问作者Muntashir Are Rahi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:27:27