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 set_magic_quotes_runtime() 函数过时解决方法
Jul 08 PHP
PHP二维数组的去重问题解析
Jul 17 PHP
PHP中替换换行符的几种方法小结
Oct 15 PHP
php页面消耗内存过大的处理办法
Mar 18 PHP
简单的cookie计数器实现源码
Jun 07 PHP
PHP中数组定义的几种方法
Sep 01 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
Mar 12 PHP
C/S和B/S两种架构区别与优缺点分析
Oct 23 PHP
php随机取mysql记录方法小结
Dec 27 PHP
对比分析php中Cookie与Session的异同
Feb 19 PHP
基于thinkphp6.0的success、error实现方法
Nov 05 PHP
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
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
PHP中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
动态样式类封装JS代码
2009/09/02 Javascript
按给定几率进行随机抽取的js代码
2010/12/28 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
js实现按Ctrl+Enter发送效果
2014/09/18 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
使用AngularJS来实现HTML页面嵌套的方法
2015/06/17 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
2017/03/10 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
vue cli2.0单页面title修改方法
2018/06/07 Javascript
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
2019/04/04 Javascript
微信小程序全局变量改变监听的实现方法
2019/07/15 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
通过实例解析js可枚举属性与不可枚举属性
2020/12/02 Javascript
用python登录Dr.com思路以及代码分享
2014/06/25 Python
整理Python最基本的操作字典的方法
2015/04/24 Python
Python实现破解猜数游戏算法示例
2017/09/25 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
2018/11/07 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
阿迪达斯西班牙官方网站:adidas西班牙
2016/07/21 全球购物
数控技术应用个人求职信范文
2014/02/03 职场文书
校长师德师风自我剖析材料
2014/09/29 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
单位作风建设自查报告
2014/10/23 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL
Java Spring Boot 正确读取配置文件中的属性的值
2022/04/20 Java/Android