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

PHP登录页集成Google reCaptcha遇file_get_contents错误求助

Google reCaptcha集成问题:file_get_contents无法解析Google主机导致验证失败

为防止登录页遭暴力攻击,集成Google reCaptcha时遇到php_network_getaddresses: getaddrinfo failed错误,无法解析Google主机。无论是否勾选验证码,均提示“Robot verification failed, please try again”。

错误信息

勾选验证码时的错误

Warning: file_get_contents(): php_network_getaddresses: getaddrinfo failed: No such host is known. in C:\Applications\wamp64\www\portail\controllers\UserController.controller.php on line 199

Warning: file_get_contents(https://www.google.com/recaptcha/api/siteverify?secret=mySecretKey&response=03AIIukzgubg-3X3dSe9XfZqq-JRMXUG4-TX5BO2MafiTYEjlHVM7b731p0nzIe8nw4n8IjZ7Po0wJeVT4jMYVqUzjZqvq8ACAbR8CtwH6sI5tKMDFahHUHNFn03iJEj9ZfN8F6yJXV0u89x0x9RjEVdkQzK5-A3e7zAkEk3xxyv3MVsVkaS9nFYSOzMZKpY1PAaXS7ilfXTqg76zrv3cga2U_06OiavRv1OnieFmN_SeQQEhc2yv9eyKGCHq_4tdkpP4WB4-He8ChOeDLDNRot8CLoVD5I1c38EnLQCwSippt3dNf6G0TDAAECnPJoUmJG_oU_LEPjAXI-KN0_-YP4lQBqwr_4iOl5Jv_M3QIhaMhsCcEjgna5dBJUj4RnyFK4TpRTId1CK5lZ4cZhuq8iaPZoO9wz2d-aarbTIcV-LU2nOeS1nJSfhed8eKEWNOiewp0qvHx-O2VCnxCVOFKwIWlyRT4nnUyhHX5DO8R-_AFEWc9Ub0WywwtzJaO2XVKyK5-O1VztraiEm2z3FocjpT1h_7stYK80g): failed to open stream: php_network_getaddresses: getaddrinfo failed: No such host is known. in C:\Applications\wamp64\www\portail\controllers\UserController.controller.php on line 199
bool(false) string(548) "03AIIukzgubg-3X3dSe9XfZqq-JRMXUG4-TX5BO2MafiTYEjlHVM7b731p0nzIe8nw4n8IjZ7Po0wJeVT4jMYVqUzjZqvq8ACAbR8CtwH6sI5tKMDFahHUHNFn03iJEj9ZfN8F6yJXV0u89x0x9RjEVdkQzK5-A3e7zAkEk3xxyv3MVsVkaS9nFYSOzMZKpY1PAaXS7ilfXTqg76zrv3cga2U_06OiavRv1OnieFmN_SeQQEhc2yv9eyKGCHq_4tdkpP4WB4-He8ChOeDLDNRot8CLoVD5I1c38EnLQCwSippt3dNf6G0TDAAECnPJoUmJG_oU_LEPjAXI-KN0_-YP4lQBqwr_4iOl5Jv_M3QIhaMhsCcEjgna5dBJUj4RnyFK4TpRTId1CK5lZ4cZhuq8iaPZoO9wz2d-aarbTIcV-LU2nOeS1nJSfhed8eKEWNOiewp0qvHx-O2VCnxCVOFKwIWlyRT4nnUyhHX5DO8R-_AFEWc9Ub0WywwtzJaO2XVKyK5-O1VztraiEm2z3FocjpT1h_7stYK80g"
Robot verification failed, please try again.

未勾选验证码时的错误

Robot verification failed, please try again.

相关代码

UserController.controller.php中的validation_login()函数

public function validation_login($login, $password)
{
if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])){

    $secret = 'mySecretKey';
    $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
    $responseData = json_decode($verifyResponse);
    $success = $responseData["success"];
    if($success === true)
    { 
        if ($this->userManager->isCombinaisonValide($login, $password)) {
            Toolbox::ajouterMessageAlerte("Bon retour sur le portail" . $login . " ! AJOUT DU SYSTEME DE FILTRE POUR LES INCIDENTS" , Toolbox::COULEUR_VERTE);
            $_SESSION['profil'] = [
                "login" => $login,
            ];
            $datas = $this->userManager->getUserInformation($_SESSION['profil']['login']);
            $_SESSION['profil']["bl"] = $datas['bl'];
            $_SESSION['profil']["dist"] = $datas['dist'];
            $_SESSION['profil']["admin"] = $datas['admin'];
            $_SESSION['profil']["demandevalidation"] = $datas['demandevalidation'];
            $_SESSION['profil']["pilote"] = $datas['pilote'];
            $_SESSION['profil']["rs"] = $datas['rs'];
            if (Securite::estConnecte() && Securite::estBl()) {
                header("Location: " . URL . "tngs", "X-XSS-Protection: 1; mode=block");
            } else {
                header("Location: " . URL . "accueil", "X-XSS-Protection: 1; mode=block");
            }
        } else {
            Toolbox::ajouterMessageAlerte("Combinaison Login / Mot de passe non valide", Toolbox::COULEUR_ROUGE);
            header("location: " . URL, "X-XSS-Protection: 1; mode=block");
            
        }
    }
    else
    {
        var_dump($verifyResponse);
        //var_dump($responseData);
        var_dump($_POST['g-recaptcha-response']);
        ?>  <div style="color: red;"><b>Robot verification failed, please try again.</b></div> <?php
    }
}
else{
    ?>   <div style="color: red;"><b>Please do the robot verification.</b></div> <?php
}
}

login.view.php登录表单代码

<?php
ob_start();
// $token = generer_token('connexion');
 ?>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<div class="container col-xl-10 col-xxl-8 px-4 py-0">
  <div class="row align-items-center g-lg-5 py-5">
    <div class="col-lg-7 text-center text-lg-start">
      <h1 class="display-4 fw-bold lh-1 mb-3">PORTAIL BL</h1>
      <p class="col-lg-10 fs-4">Bienvenue sur le portail. N'hésitez pas à nous faire un retour si vous avez rencontré des problèmes lors de la navigation.<br> Bonne journée à vous.<br> Cordialement, la cellule SI. </br>
     
    </div>
    <div class="col-md-10 mx-auto col-lg-5">

      <form class="p-4 p-md-5 border rounded-3 bg-light" method="POST" action="<?= URL ?>validation_login">
        <div class="form-floating mb-3">
          <input type="text" class="form-control" id="login" placeholder="AAAA0000" name="login" required>
          <label for="login">CUID</label>
        </div>
        <div class="form-floating mb-3">
          <input type="password" class="form-control" id="password" name="password" placeholder="Mot de passe" required>
          <input type="checkbox" onclick="Afficher()"> Afficher le mot de passe
          <label for="password">Mot de passe</label>
        </div>
        <button class="w-100 btn btn-lg btn-primary bouton border-0" id="vdcsolo" type="submit">Connexion</button>
        <hr class="my-4">
        <a href="<?= URL ?>users/motdepasse"><small class="text-muted">Pour un mot de passe oublié, cliquez ici.</small></a>
        <div class="g-recaptcha" data-sitekey="myDataSiteKey"></div><br><br>
     
        //<input type="hidden" name="token" id="token" value=" <?php echo $token; ?>"/> 
      </form>
      <script>
      function Afficher()
      { 
      var input = document.getElementById("password"); 
      if (input.type === "password")
      { 
      input.type = "text"; 
      } 
      else
      { 
      input.type = "password"; 
      } 
      } 
      </script>


    </div>
  </div>
</div>

<?php
$titre = "";
$content = ob_get_clean();
require "template.php";
?>

解决方案

1. 修复DNS解析问题

php_network_getaddresses: getaddrinfo failed错误说明服务器无法解析www.google.com域名,可尝试:

  • 修改服务器DNS配置,添加公共DNS(如8.8.8.8、1.1.1.1)
  • 检查WAMP环境中Apache的网络权限,确保能访问外部网络
  • 测试服务器能否ping通www.google.com,排查防火墙或代理限制

2. 替换file_get_contents为cURL

file_get_contents对网络请求支持有限,改用cURL更稳定:

public function validation_login($login, $password)
{
if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])){

    $secret = 'mySecretKey';
    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $data = [
        'secret' => $secret,
        'response' => $_POST['g-recaptcha-response'],
        'remoteip' => $_SERVER['REMOTE_ADDR'] // 可选,添加客户端IP增强验证
    ];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 本地SSL问题可临时关闭,生产环境建议开启

    $verifyResponse = curl_exec($ch);
    $curlError = curl_error($ch);
    curl_close($ch);

    if($curlError) {
        echo '<div style="color: red;"><b>Network error: ' . $curlError . '</b></div>';
        return;
    }

    $responseData = json_decode($verifyResponse);
    if($responseData && $responseData->success === true)
    { 
        // 原登录逻辑不变
        if ($this->userManager->isCombinaisonValide($login, $password)) {
            Toolbox::ajouterMessageAlerte("Bon retour sur le portail" . $login . " ! AJOUT DU SYSTEME DE FILTRE POUR LES INCIDENTS" , Toolbox::COULEUR_VERTE);
            $_SESSION['profil'] = [
                "login" => $login,
            ];
            $datas = $this->userManager->getUserInformation($_SESSION['profil']['login']);
            $_SESSION['profil']["bl"] = $datas['bl'];
            $_SESSION['profil']["dist"] = $datas['dist'];
            $_SESSION['profil']["admin"] = $datas['admin'];
            $_SESSION['profil']["demandevalidation"] = $datas['demandevalidation'];
            $_SESSION['profil']["pilote"] = $datas['pilote'];
            $_SESSION['profil']["rs"] = $datas['rs'];
            if (Securite::estConnecte() && Securite::estBl()) {
                header("Location: " . URL . "tngs", "X-XSS-Protection: 1; mode=block");
            } else {
                header("Location: " . URL . "accueil", "X-XSS-Protection: 1; mode=block");
            }
        } else {
            Toolbox::ajouterMessageAlerte("Combinaison Login / Mot de passe non valide", Toolbox::COULEUR_ROUGE);
            header("location: " . URL, "X-XSS-Protection: 1; mode=block");
            
        }
    }
    else
    {
        var_dump($verifyResponse);
        var_dump($_POST['g-recaptcha-response']);
        ?>  <div style="color: red;"><b>Robot verification failed, please try again.</b></div> <?php
    }
}
else{
    ?>   <div style="color: red;"><b>Please do the robot verification.</b></div> <?php
}
}

3. 完善错误处理逻辑

原代码未处理file_get_contents返回false的情况,导致$responseData为null,需先判断$responseData是否有效,再检查success字段。

4. 检查密钥配置

确保data-sitekey和secret密钥与Google reCaptcha后台一致,且域名已添加到允许列表。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:10:29