2012-08-11 70 views
0

recaptcha似乎在我的本地機器上進行驗證,但是當我將其上傳到我的現場網站時,它總是失敗。我傾倒了答案/響應對象,它看起來像這樣:Recaptcha在現場直播無效

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

There's HTML in it!發生了什麼事,爲什麼這會失敗?

我甩我$_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>>... 

但我回來的響應並不像它從谷歌的。這是「禁止訪問!」頁。我想知道是否有東西在攔截它...

+0

這是Google的reCaptcha?還有你用什麼代碼驗證驗證碼本身? – Sammaye 2012-08-11 20:43:42

+0

@Sammaye:是的,Google recaptcha。現在發佈代碼。 – mpen 2012-08-11 20:46:54

+0

好的,你說!$ recaptcha_answer-> is_valid,else語句在哪裏? – 2012-08-11 20:55:52

回答

0

我發現了這個問題。由於回覆不是從谷歌回來,我試圖查找IP:

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

他們是一樣的,當我在我的服務器上運行這個!有人搞砸了主機查找。啊!