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>>&challenge=<<BLAH>>...
但我得到的回复看起来不像来自谷歌。这是“禁止访问!” 页。我想知道是不是有什么东西在拦截它...