recaptcha似乎在我的本地计算机上验证,但是当我将其上传到我的实际网站时它总是失败。我转储了答案/响应对象,它看起来像这样:
ReCaptchaResponse::__set_state(array(
'is_valid' => false,
'error' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"',
))
里面有HTML!发生了什么,为什么会失败?
我也放弃了我的$_POST
vars,它们看起来像这样:
array (
*snip*
'recaptcha_challenge_field' => '03AHJ_VuvqpAkJnmfOZHHf80EPt85lVEeq9IRuO9zw1jZ1fzUk-_DAw0z2k3-TeXzAXQVXUWChyCGnC1RoXRPly4Ldz0FugPKW_WKWEoKysNLnpcv2xvyWONpq0VDV3ipsy5Vukui0zxlSqiBBWw00VYPSkO52OqMv_A',
'recaptcha_response_field' => 'uterf sw',
)
验证码:
$recaptcha_answer = recaptcha_check_answer('MY_PRIVATE_KEY_HERE', $_SERVER['REMOTE_ADDR'], $_POST['recaptcha_challenge_field'], $_POST['recaptcha_response_field']);
if(!$recaptcha_answer->is_valid) {
$validation_errors[] = 'The reCAPTCHA you entered was not correct';
echo '<!-- '.var_export($recaptcha_answer,true).var_export($_POST,true).' -->';
}
显示代码:
<?= recaptcha_get_html('MY_PUBLIC_KEY_HERE') ?>
如果我将recaptcha文本框留空并提交表单,我会收到正确的错误消息:
不正确-验证码溶胶
但如果我填写它,它总是显示doctype ...我只是注意到那不是我正在使用的doctype;它试图告诉我我需要使用严格的doc类型而不是过渡性的吗?
如果它有任何区别,我正在使用“干净”的主题:
<script type="text/javascript">
var RecaptchaOptions = {
theme : 'clean'
};
</script>
“红色”无法正确显示;文本框未对齐。
有些人进了图书馆。有一种名为_recaptcha_http_post
的方法。它使用fsockopen
向验证服务器发送请求。传出请求看起来像这样:
POST /recaptcha/api/verify HTTP/1.0
Host: www.google.com
Content-Type: application/x-www-form-urlencoded;
Content-Length: 272
User-Agent: reCAPTCHA/PHP
privatekey=<<MY INFO HERE>>&challenge=<<BLAH>>...
但我回复的回复看起来并不是来自谷歌。这是一个“禁止访问!”页。我想知道是否有人在拦截它......
答案 0 :(得分:0)
我发现了这个问题。由于回复不是来自谷歌,我尝试查找IP:
echo 'www.google.com: '. gethostbyname('www.google.com').'<br/>';
echo '<offending site>: '. gethostbyname('<offending site>');
当我在我的服务器上运行它们时它们是一样的!有人搞砸了主机查找。啊!