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在线生成ico文件的代码
Oct 09 PHP
解决ajax+php中文乱码的方法详解
Jun 09 PHP
smarty缓存用法分析
Dec 16 PHP
php通过array_merge()函数合并两个数组的方法
Mar 18 PHP
PHP7.0安装笔记整理
Aug 28 PHP
php提交过来的数据生成为txt文件
Apr 28 PHP
基于PHP实现数据分页显示功能
May 26 PHP
PHP+JQuery+Ajax实现分页方法详解
Aug 06 PHP
PHP手机号中间四位用星号*代替显示的实例
Jun 02 PHP
php框架CodeIgniter使用redis的方法分析
Apr 13 PHP
PHP中数组转换为SimpleXML教程
Jan 27 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
May 30 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
中国广播史趣谈 — 几个历史第一次
2021/03/01 无线电
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
jquery动态加载图片数据练习代码
2011/08/04 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
2016/08/25 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
2017/02/27 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
Bootstrap 3多级下拉菜单实例
2017/11/23 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
React key值的作用和使用详解
2018/08/23 Javascript
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
终端命令查看TensorFlow版本号及路径的方法
2018/06/13 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
保加利亚服装和鞋类购物网站:Bibloo.bg
2020/11/08 全球购物
新加坡第一大健康与美容零售商:屈臣氏新加坡(Watsons Singapore)
2020/12/11 全球购物
高中运动会入场词
2014/02/14 职场文书
婚宴主持词
2015/06/30 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js