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

reCAPTCHA验证始终返回false且加载时出现ERR_EMPTY_RESPONSE求助

解决reCAPTCHA验证始终返回false及ERR_EMPTY_RESPONSE问题

我帮你梳理下代码里的几个关键问题,这应该就是导致你一直得到fail结果和出现ERR_EMPTY_RESPONSE的核心原因:

1. 拼写错误(最直接的问题)

你代码里把success拼写成了succes(少了一个s)——不管是判断条件里的$response->{'succes'},还是SESSION赋值的"succes",都是拼写错误。Google的reCAPTCHA API返回的字段名是**success**,所以你永远取不到正确的验证结果,自然一直走else分支返回fail。

2. URL参数转义错误

你在拼接URL时用了&,这是HTML的转义字符,在PHP里直接拼接URL应该用&,否则Google的API无法正确解析你的请求参数,会返回无效响应甚至空内容,导致file_get_contents获取失败,进而json_decode返回false。

3. 布尔值判断逻辑错误

reCAPTCHA API返回的success是布尔类型(true/false),不是字符串'true'。你用字符串比较的方式会导致判断失效,应该直接和布尔值比较。

4. file_get_contents的兼容性问题

部分服务器会禁用allow_url_fopen配置,这时候file_get_contents无法请求外部URL,会返回false,引发ERR_EMPTY_RESPONSE。改用cURL发送请求兼容性更好,也能更清晰地排查请求错误。

5. 缺少用户IP参数(推荐补充)

Google官方推荐在验证请求中带上用户的IP地址(remoteip参数),这能提升验证的准确性和安全性,避免一些异常请求被误判。


修正后的完整代码

<?php
session_start(); // 别忘了开启session,否则SESSION赋值无效

$secretKey = "***********";
$responseKey = $_POST['g-recaptcha-response'];
$userIp = $_SERVER['REMOTE_ADDR'];

// 正确拼接URL,使用&分隔参数,加上remoteip
$url = "https://www.google.com/recaptcha/api/siteverify?secret={$secretKey}&response={$responseKey}&remoteip={$userIp}";

// 改用cURL发送请求,兼容性更好
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 若服务器SSL验证有问题可开启,生产环境建议保持true
$response = curl_exec($ch);
curl_close($ch);

// 先判断请求是否成功
if ($response === false) {
    $_SESSION['response'] = "request_fail"; // 请求本身失败
} else {
    $responseData = json_decode($response);
    // 检查json解码是否成功,以及success字段是否为true
    if ($responseData !== null && $responseData->success === true) {
        $_SESSION['response'] = "success";
    } else {
        // 可以打印错误信息调试,比如$responseData->error-codes
        // var_dump($responseData->{'error-codes'});
        $_SESSION['response'] = "fail";
    }
}
?>

额外调试建议

如果还是有问题,可以在代码里打印$response和$responseData,看看Google返回的具体内容:

var_dump($response); // 查看请求返回的原始内容
var_dump($responseData); // 查看解码后的对象

如果返回error-codes,可以对照Google的reCAPTCHA文档排查具体错误原因(比如密钥错误、响应过期等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:00:00