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

PHP cURL设置CURLOPT_POSTFIELDS调用Cloudflare Stream返回400错误

问题原因

核心错误是请求头声明的内容格式与实际传递的POST数据格式不匹配:

  • 代码中手动设置请求头Content-Type: application/json,告知接口接收方当前发送的是JSON格式数据
  • 但实际传入CURLOPT_POSTFIELDS的参数是downloadable=true,属于application/x-www-form-urlencoded格式的表单字符串,不是合法JSON结构,接口解析请求体失败就会直接返回400 Bad Request错误。
修复方案

将POST参数转换为合法JSON字符串后再传递即可,修正后的代码如下:

$tokench = curl_init();
curl_setopt($tokench, CURLOPT_URL, "https://api.cloudflare.com/client/v4/accounts/".getenv("CLOUDFLARE_ACCOUNT")."/stream/".urlencode($_GET["video"])."/token");
curl_setopt($tokench, CURLOPT_POST, 1);
curl_setopt($tokench, CURLOPT_RETURNTRANSFER, true);
curl_setopt($tokench, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer ".getenv("CLOUDFLARE_TOKEN"),
    "Content-Type: application/json"
]);
// 组装参数并转为JSON格式
$postPayload = json_encode([
    "downloadable" => true
]);
curl_setopt($tokench, CURLOPT_POSTFIELDS, $postPayload);
$tokenraw = curl_exec($tokench);
curl_close($tokench);
$tokenarr = json_decode($tokenraw, true);

补充说明

  • 如果修改后仍返回错误,可尝试将downloadable的参数值改为字符串形式的"true"适配接口参数要求
  • 建议增加cURL错误捕获逻辑,通过curl_error($tokench)先判断请求本身是否存在网络、证书类问题,再解析接口返回内容
  • 注意对$_GET["video"]入参做合法性校验,避免未授权的接口调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:24:28