php空间不支持socket但支持curl时recaptcha的用法


Posted in PHP onNovember 07, 2011

1.修改recaptchalib.php中的两个方法

function _recaptcha_http_post($host, $path, $data, $port = 80) { 
$req = _recaptcha_qsencode ($data); 
$response = ''; 
$url = $host.$path; 
$post_data = $req; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
// 我们在POST数据哦! 
curl_setopt($ch, CURLOPT_POST, 1); 
// 把post的变量加上 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 
$output = curl_exec($ch); 
curl_close($ch); 
//echo $output; 
$response = $output; 
return $response; 
} 
function recaptcha_check_answer ($privkey, $remoteip, $challenge, $response, $extra_params = array()) 
{ 
if ($privkey == null || $privkey == '') { 
die ("To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>"); 
} 
if ($remoteip == null || $remoteip == '') { 
die ("For security reasons, you must pass the remote ip to reCAPTCHA"); 
} 
//discard spam submissions 
if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) { 
$recaptcha_response = new ReCaptchaResponse(); 
$recaptcha_response->is_valid = false; 
$recaptcha_response->error = 'incorrect-captcha-sol'; 
return $recaptcha_response; 
} 
$response = _recaptcha_http_post (RECAPTCHA_VERIFY_SERVER, "/recaptcha/api/verify", 
array ( 
'privatekey' => $privkey, 
'remoteip' => $remoteip, 
'challenge' => $challenge, 
'response' => $response 
) + $extra_params 
); 
$answers = explode ("\n", $response [1]); 
$recaptcha_response = new ReCaptchaResponse(); 
$pos = strpos($response, 'true'); 
if ($pos === false) { 
$recaptcha_response->is_valid = false; 
$recaptcha_response->error = $response; 
} else { 
$recaptcha_response->is_valid = true; 
} 
return $recaptcha_response; 
}

2.demo.php
<html> 
<body> 
<form action="" method="post"> 
<?php 
require_once('recaptchalib.php'); 
// Get a key from https://www.google.com/recaptcha/admin/create 
$publickey = "你的公共key ---自己去http://www.google.com/recaptcha申请"; 
$privatekey = "你的私有key ---自己去http://www.google.com/recaptcha申请"; 
# the response from reCAPTCHA 
$resp = null; 
# the error code from reCAPTCHA, if any 
$error = null; 
# was there a reCAPTCHA response? 
if ($_POST["recaptcha_response_field"]) { 
$resp = recaptcha_check_answer ($privatekey, 
$_SERVER["REMOTE_ADDR"], 
$_POST["recaptcha_challenge_field"], 
$_POST["recaptcha_response_field"]); 
if ($resp->is_valid) { 
echo "You got it!"; 
} else { 
# set the error code so that we can display it 
$error = $resp->error; 
echo $error; 
//echo $_POST["recaptcha_challenge_field"]; 
//echo $_POST["recaptcha_response_field"]; 
} 
} 
echo recaptcha_get_html($publickey, $error); 
?> 
<br/> 
<input type="submit" value="submit" /> 
</form> 
</body> 
</html>
PHP 相关文章推荐
用PHP和ACCESS写聊天室(四)
Oct 09 PHP
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
Apr 24 PHP
在PHP中养成7个面向对象的好习惯
Jan 28 PHP
PHP初学者最感迷茫的问题小结
Mar 27 PHP
关于file_get_contents返回为空或函数不可用的解决方案
Jun 24 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
Jan 07 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
Feb 15 PHP
form表单传递数组数据、php脚本接收的实例
Feb 09 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
Mar 16 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
CodeIgniter框架数据库基本操作示例
May 24 PHP
PHP date()格式MySQL中插入datetime方法
Jan 29 PHP
PHP动态分页函数,PHP开发分页必备啦
Nov 07 #PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
Nov 07 #PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
Nov 07 #PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
Nov 07 #PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
Nov 07 #PHP
php数组函数序列之array_flip() 将数组键名与值对调
Nov 07 #PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
Nov 07 #PHP
You might like
用PHP和MySQL保存和输出图片
2006/10/09 PHP
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
vue 文件目录结构详解
2017/11/24 Javascript
vue.js使用3DES加密的方法示例
2018/05/18 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
vue增加强缓存和版本号的实现方法
2019/05/01 Javascript
JS函数进阶之继承用法实例分析
2020/01/15 Javascript
Python的Flask框架中实现登录用户的个人资料和头像的教程
2015/04/20 Python
Python实现的彩票机选器实例
2015/06/17 Python
Python实现基本线性数据结构
2016/08/22 Python
Python实现PS滤镜中马赛克效果示例
2018/01/20 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
浅谈django框架集成swagger以及自定义参数问题
2020/07/07 Python
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
社会实践心得体会
2014/01/03 职场文书
公务员保密承诺书
2014/03/27 职场文书
推荐信格式要求
2014/05/09 职场文书
管理建议书范文
2014/05/13 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
复活读书笔记
2015/06/29 职场文书
大学生活委员竞选稿
2015/11/21 职场文书
Spring中bean的生命周期之getSingleton方法
2021/06/30 Java/Android
python通过新建环境安装tfx的问题
2022/05/20 Python