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动态生成VRML网页
Oct 09 PHP
php cli 方式 在crotab中运行解决
Feb 08 PHP
PHP 图片文件上传实现代码
Dec 29 PHP
php !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
Jan 07 PHP
解析php中static,const与define的使用区别
Jun 18 PHP
php使用qr生成二维码的示例分享
Jan 20 PHP
php实现图片添加水印功能
Feb 13 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
Sep 22 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
Oct 08 PHP
PHP数据库编程之MySQL优化策略概述
Aug 16 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 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
多人战的战术与战略
2020/03/04 星际争霸
MySQL GBK→UTF-8编码转换
2007/05/24 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
PHP后台备份MySQL数据库的源码实例
2019/03/18 PHP
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
2014/06/26 Javascript
node.js不得不说的12点内容
2014/07/14 Javascript
javascript使用数组的push方法完成快速排序
2014/09/15 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
js轮播图代码分享
2016/07/14 Javascript
js遍历map javaScript遍历map的简单实现
2016/08/26 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
浅析Node.js:DNS模块的使用
2016/11/23 Javascript
详解微信小程序Radio选中样式切换
2017/07/06 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
使用FormData实现上传多个文件
2018/12/04 Javascript
JS实现分页导航效果
2020/02/19 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
详解Django中的权限和组以及消息
2015/07/23 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
使用python+whoosh实现全文检索
2019/12/09 Python
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
南京软件公司的.net程序员笔试题
2014/08/31 面试题
简历中个人自我评价分享
2014/03/15 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
幼儿园开学通知
2015/04/24 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang
Python字符串的转义字符
2022/04/07 Python