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 相关文章推荐
GD输出汉字的函数的分析
Oct 09 PHP
PHP MemCached高级缓存配置图文教程
Aug 05 PHP
PHPCMS的使用小结
Sep 20 PHP
PHP文件打开、关闭、写入的判断与执行代码
May 24 PHP
PHP类中的魔术方法(Magic Method)简明总结
Jul 08 PHP
Zend Framework教程之MVC框架的Controller用法分析
Mar 07 PHP
微信公众平台DEMO(PHP)
May 04 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
Jul 23 PHP
PHP 信号管理知识整理汇总
Feb 19 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
Dec 21 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 PHP
php与阿里云短信接口接入操作案例分析
May 27 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
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
PHP中substr()与explode()函数用法分析
2014/11/24 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
js 数组操作代码集锦
2009/04/28 Javascript
JavaScript中出现乱码的处理心得
2009/12/24 Javascript
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
Javascript操作URL函数修改版
2013/11/07 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
Javascript 对cookie操作详解及实例
2016/12/29 Javascript
Angular2 PrimeNG分页模块学习
2017/01/14 Javascript
基于jquery实现五星好评
2017/11/18 jQuery
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
python实现对一个完整url进行分割的方法
2015/04/29 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
2020/03/06 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
奥巴马开学演讲稿
2014/05/15 职场文书
电子商务实训报告总结
2014/11/05 职场文书
佛光寺导游词
2015/02/10 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书
校园歌手大赛主持词
2015/07/03 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
mysql中整数数据类型tinyint详解
2021/12/06 MySQL
mybatis 获取更新记录的id
2022/05/20 Java/Android
MySQL示例讲解数据库约束以及表的设计
2022/06/16 MySQL