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

使用PHP POST调用Cloudflare API更新DNS记录报错:POST方法不被允许

问题解决:Cloudflare API更新DNS记录报错“POST method not allowed”

错误原因

Cloudflare的DNS记录更新接口(URL包含dns_records/{{recordID}})要求使用PUT请求方法,而非POST。POST方法仅用于创建新DNS记录(URL不带recordID),当用POST调用更新接口并搭配api_token认证时,就会触发该权限错误。

代码修正

只需将PHP中的POST请求改为PUT请求即可解决问题,修改点如下:

原代码中设置POST请求的代码:

curl_setopt($curl, CURLOPT_POST, true);

替换为:

// 改用PUT请求方法
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");

完整修正后的代码

include("../../env.php");

//variable input by POST
$domain = $_POST['domain'];
$recordID = $_POST['recordID'];
$content = $_POST['content'];
$zoneID = $_POST['zoneID'];

//for update record
$linkRecord = "https://api.cloudflare.com/client/v4/zones/$zoneID/dns_records/$recordID";

$header = array(
    "Content-Type: application/json",
    "Authorization: Bearer $authToken"
);

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $linkRecord);
// 修改为PUT请求
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);

$bodyArray = array("type"=>"A","name"=>$domain,"content"=>$content,"proxied"=>true);
$body = json_encode($bodyArray);

curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
$resp = curl_exec($curl);

print_r($resp);

补充说明

你在Postman中能正常运行,大概率是因为Postman里选择的是PUT方法,而PHP代码误写成了POST。PHP完全支持带Token的POST/PUT请求,问题本质是请求方法与Cloudflare API接口的要求不匹配。

内容的提问来源于stack exchange,提问作者Meikel Rizky Hartawan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:21:30