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之第七天
Oct 09 PHP
PHP 强制下载文件代码
Oct 24 PHP
PHP函数extension_loaded()用法实例
Jan 19 PHP
详解PHP+AJAX无刷新分页实现方法
Nov 03 PHP
Discuz论坛密码与密保加密规则
Dec 19 PHP
ThinkPHP 模板substr的截取字符串函数详解
Jan 09 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
Feb 17 PHP
Yii2设置默认控制器的两种方法
May 19 PHP
PHP 数组黑名单/白名单实例代码详解
Jun 04 PHP
php实现的表单验证类完整示例
Aug 13 PHP
PHP的静态方法与普通方法用法实例分析
Sep 26 PHP
yii框架数据库关联查询操作示例
Oct 14 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入门学习知识点六 PHP文件的读写操作代码
2011/07/14 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
js 强制弹出窗口代码研究-又一款代码
2010/03/20 Javascript
return false;和e.preventDefault();的区别
2010/07/11 Javascript
window.parent与window.openner区别介绍
2012/04/12 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
JQuery筛选器全系列介绍
2013/08/27 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
js实现动态改变radio状态的方法
2018/02/28 Javascript
Vue中 key keep-alive的实现原理
2018/09/18 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
js实现随机8位验证码
2020/07/24 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
python使用urllib2提交http post请求的方法
2015/05/26 Python
wxPython的安装与使用教程
2018/08/31 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
销售人员自我评价怎么写
2013/09/19 职场文书
安全生产管理责任书
2014/04/16 职场文书
全运会口号
2014/06/20 职场文书
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
2015年班主任德育工作总结
2015/05/21 职场文书
大学生学生会工作总结2015
2015/05/26 职场文书
自定义函数实现单词排序并运用于PostgreSQL(实现代码)
2021/04/22 PostgreSQL
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android
redis击穿 雪崩 穿透超详细解决方案梳理
2022/03/17 Redis
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android