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 array_push 数组函数
Dec 26 PHP
PHP strtok()函数的优点分析
Mar 02 PHP
PHP 无限分类三种方式 非函数的递归调用!
Aug 26 PHP
PHP笔记之:基于面向对象设计的详解
May 14 PHP
CI框架自动加载session出现报错的解决办法
Jun 17 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
Jun 26 PHP
CI框架验证码CAPTCHA辅助函数用法实例
Nov 05 PHP
PHP将进程作为守护进程的方法
Mar 19 PHP
PHP构造二叉树算法示例
Jun 21 PHP
php多进程模拟并发事务产生的问题小结
Dec 07 PHP
php字符串函数 str类常见用法示例
May 15 PHP
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
Apr 01 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
PHP4.04简明安装
2006/10/09 PHP
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
PHP array操作10个小技巧分享
2011/06/23 PHP
thinkPHP交易详情查询功能详解
2016/12/02 PHP
PHP中的访问修饰符简单比较
2019/02/02 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
JavaScript 动态生成方法的例子
2009/07/22 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
Javascript中this关键字的一些小知识
2015/03/15 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
2017/05/20 jQuery
VSCode 配置React Native开发环境的方法
2017/12/27 Javascript
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
python 判断自定义对象类型
2009/03/21 Python
python计算圆周率pi的方法
2015/07/11 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
详解python中递归函数
2019/04/16 Python
Python正则表达式匹配和提取IP地址
2019/06/06 Python
Windows下实现将Pascal VOC转化为TFRecords
2020/02/17 Python
win10安装python3.6的常见问题
2020/07/01 Python
铭立家具面试题
2012/12/06 面试题
音乐幼师求职信
2014/07/09 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
计划生育证明书写要求
2014/09/17 职场文书
SpringBoot详解执行过程
2022/07/15 Java/Android