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 相关文章推荐
PHP4(windows版本)中的COM函数
Oct 09 PHP
php htmlentities和htmlspecialchars 的区别
Aug 18 PHP
PHPMyadmin 配置文件详解(配置)
Dec 03 PHP
解析wamp5下虚拟机配置文档
Jun 27 PHP
thinkphp的CURD和查询方式介绍
Dec 19 PHP
php使用date和strtotime函数输出指定日期的方法
Nov 14 PHP
浅谈PHP中Stream(流)
Jun 08 PHP
php发送短信验证码完成注册功能
Nov 24 PHP
PHP 自动加载的简单实现(推荐)
Aug 12 PHP
php preg_match的匹配不同国家语言实例
Dec 29 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
Apr 03 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 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
cache_lite试用
2007/02/14 PHP
解析PHP中ob_start()函数的用法
2013/06/24 PHP
探讨:web上存漏洞及原理分析、防范方法
2013/06/29 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
thinkphp配置连接数据库技巧
2014/12/02 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
javascript function调用时的参数检测常用办法
2010/02/26 Javascript
使用Grunt.js管理你项目的应用说明
2013/04/24 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
JavaScript中的事件委托及好处
2016/07/12 Javascript
js实现PC端和移动端刮卡效果
2020/03/27 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
详解angularjs中如何实现控制器和指令之间交互
2017/05/31 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
2018/01/04 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
微信小程序实现弹出菜单功能
2018/06/12 Javascript
使用JS获取页面上的所有标签
2018/10/18 Javascript
9102了,你还不会移动端真机调试吗
2019/03/25 Javascript
vue生命周期的探索
2019/04/03 Javascript
react 移动端实现列表左滑删除的示例代码
2019/07/04 Javascript
微信小程序错误this.setData报错及解决过程
2019/09/18 Javascript
JavaScript实现简易聊天对话框(加滚动条)
2020/02/10 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
Python实现多进程共享数据的方法分析
2017/12/04 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
python实现图片素描效果
2020/09/26 Python
Luxplus丹麦:香水和个人护理折扣
2018/04/23 全球购物
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
学校门卫工作职责
2013/12/07 职场文书
师德师风演讲稿
2014/05/05 职场文书
办理房产过户的委托书
2014/09/14 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
百善孝为先:关于孝道的经典语录
2019/10/18 职场文书