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学习之PHP运算符
Oct 09 PHP
PHP实现定时生成HTML网站首页实例代码
Nov 20 PHP
PHP获取类中常量,属性,及方法列表的方法
Apr 09 PHP
php foreach 参数强制类型转换的问题
Dec 10 PHP
PHP5中虚函数的实现方法分享
Apr 20 PHP
CI(CodeIgniter)框架介绍
Jun 09 PHP
php+ajax实现无刷新动态加载数据技术
Apr 28 PHP
织梦sitemap地图实时推送给百度的教程
Aug 03 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 PHP
php 读写json文件及修改json的方法
Mar 07 PHP
php+layui数据表格实现数据分页渲染代码
Oct 26 PHP
Laravel + Elasticsearch 实现中文搜索的方法
Feb 02 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
fgetcvs在linux的问题
2012/01/15 PHP
PHP创建PowerPoint2007文档的方法
2015/12/10 PHP
ThinkPHP实现生成和校验验证码功能
2017/04/28 PHP
PHP实现文件下载【实例分享】
2017/04/28 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
this和执行上下文实现代码
2010/07/01 Javascript
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
js中日期的加减法
2015/05/06 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
2016/10/13 Javascript
Bootstrap CSS组件之导航(nav)
2016/12/17 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
2018/09/05 Javascript
详解Vue中watch对象内属性的方法
2019/02/01 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
Python3处理文件中每个词的方法
2015/05/22 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
python 执行shell命令并将结果保存的实例
2018/05/11 Python
python 实现视频 图像帧提取
2019/12/10 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
Python 实现向word(docx)中输出
2020/02/13 Python
python如何处理程序无法打开
2020/06/16 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
五分钟学会怎么用python做一个简单的贪吃蛇
2021/01/12 Python
高中生学习生活的自我评价
2013/11/27 职场文书
创业大赛策划书
2014/03/01 职场文书
房产公证书
2015/01/23 职场文书
餐饮服务员岗位职责
2015/02/09 职场文书
初中班主任工作随笔
2015/08/15 职场文书
2015教师个人年度工作总结
2015/10/23 职场文书