0

recaptcha似乎在我的本地计算机上验证,但是当我将它上传到我的实时站点时它总是失败。我转储了答案/响应对象,它看起来像这样:

ReCaptchaResponse::__set_state(array(
   'is_valid' => false,
   'error' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"',
))

里面有HTML!这是怎么回事,为什么会失败?

$_POST也丢弃了我的变量,它们看起来像这样:

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 文本框留空并提交表单,我会收到正确的错误消息:

不正确的验证码溶胶

但是如果我填写它,它总是显示那个文档类型......我只是注意到那不是我正在使用的文档类型;它是否试图告诉我我需要使用严格的文档类型而不是过渡?


如果有任何区别,我将使用“干净”主题:

<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>>&amp;challenge=<<BLAH>>...

但我得到的回复看起来不像来自谷歌。这是“禁止访问!” 页。我想知道是不是有什么东西在拦截它...

4

1 回答 1

0

我发现了这个问题。由于谷歌没有返回响应,我尝试查找 IP:

echo 'www.google.com: '. gethostbyname('www.google.com').'<br/>';
echo '<offending site>: '. gethostbyname('<offending site>');

当我在我的服务器上运行它时它们是一样的!有人搞砸了主机查找。啊!

于 2012-08-11T22:14:37.963 回答