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

FCM推送报411错误:POST请求需Content-length头问题求助

问题排查与修复方案

核心问题分析

收到411错误的本质原因并非真的缺少Content-Length头,而是请求中存在其他格式或配置错误,导致服务器无法正确解析请求,进而返回了误导性的状态码。具体问题点如下:

  • 授权令牌格式异常:shell_exec执行Python脚本返回的$auth_token可能包含换行符、空格等多余空白字符,导致Authorization头格式无效
  • 手动设置Content-Length冗余且易出错:curl会自动计算并设置Content-Length头,手动计算若存在编码偏差(如多字节字符)会导致长度不匹配
  • FCM接口URL错误:v1版本的FCM接口URL格式应为https://fcm.googleapis.com/v1/projects/{PROJECT_ID}/messages:send,你的URL中black-queen/8eff3不符合规范
  • 未定义变量错误:代码末尾print($response)中的$response未定义,属于无效输出

修复后的代码

function sendNotification($token, $title, $body){
    $command = escapeshellcmd('/usr/bin/python3 api/fcm.py');
    // 清理令牌中的换行、空格等冗余字符
    $auth_token = trim(shell_exec($command)); 

    // 构造请求数据
    $request_data = array(
        'message' => array(
            'token' => $token,
            'notification' => array(
                'body' => $body,
                'title' => $title
            )
        )
    );

    $fields = json_encode($request_data);

    // 配置请求头,移除手动设置的Content-Length
    $headers = array(
        'Content-Type: application/json',
        'Authorization: Bearer ' . $auth_token
    );

    // 修正FCM接口URL,替换为你的Firebase项目ID
    $url = 'https://fcm.googleapis.com/v1/projects/black-queen/messages:send';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    // 生产环境建议开启SSL验证
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

    $result = curl_exec($ch);
    echo $result;

    // 排查curl执行错误
    if(curl_errno($ch)) {
        print('Error: ' . curl_error($ch));
    }

    curl_close($ch);

    // 输出正确的响应结果
    print($result);
}

额外排查建议

  • 验证授权令牌:直接输出$auth_token,确认是无多余字符的纯令牌字符串
  • 检查Python脚本:确保api/fcm.py仅输出令牌,无多余打印日志
  • 模拟请求测试:用Postman等工具构造相同请求,验证URL、令牌、请求体的有效性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:17:40