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 IPV6正则表达式验证代码
Feb 16 PHP
php 字符串函数收集
Mar 29 PHP
Linux中用PHP判断程序运行状态的2个方法
May 04 PHP
PHP命名空间(namespace)的使用基础及示例
Aug 18 PHP
php实现事件监听与触发的方法
Nov 21 PHP
PHP常见错误提示含义解释(实用!值得收藏)
Apr 25 PHP
Smarty模板简单配置与使用方法示例
May 23 PHP
php实现当前页面点击下载文件的实例代码
Nov 16 PHP
Yii2框架实现数据库常用操作总结
Feb 08 PHP
PHP使用new StdClass()创建空对象的方法分析
Jun 06 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
Jun 04 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
Sep 16 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获取相对路径)
2014/03/27 PHP
PHP巧妙利用位运算实现网站权限管理的方法
2017/03/12 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
一个JS的日期格式化算法示例
2013/07/31 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
2013/11/07 Javascript
JavaScript实现数字数组按照倒序排列的方法
2015/04/06 Javascript
arguments对象验证函数的参数是否合法
2015/06/26 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
JS功能代码集锦
2016/05/04 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
2020/02/24 Javascript
Javascript执行流程细节原理解析
2020/05/14 Javascript
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
Python对象体系深入分析
2014/10/28 Python
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
Django开发的简易留言板案例详解
2018/12/04 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
Pandas读写CSV文件的方法示例
2019/03/27 Python
python基于openpyxl生成excel文件
2020/12/23 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
促销活动总结模板
2014/07/01 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
2014年后勤工作总结
2014/11/18 职场文书
2014年人事部工作总结
2014/12/03 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
高中信息技术教学反思
2016/02/16 职场文书
关于感恩的歌曲整理(8首)
2019/08/14 职场文书
纯html+css实现奥运五环的示例代码
2021/08/02 HTML / CSS
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android