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
相关产品推荐
相关产品推荐

