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作的文本留言本的例子(三)
Oct 09 PHP
php xml文件操作代码(一)
Mar 20 PHP
PHPMYADMIN 简明安装教程 推荐
Mar 07 PHP
PHP操作数组相关函数
Feb 03 PHP
第四章 php数学运算
Dec 30 PHP
php笔记之:有规律大文件的读取与写入的分析
Apr 26 PHP
win7下memCache的安装过程(具体操作步骤)
Jun 28 PHP
php 伪造ip以及url来路信息方法汇总
Nov 25 PHP
php中smarty变量修饰用法实例分析
Jun 11 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
PHP单例模式模拟Java Bean实现方法示例
Dec 07 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 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+java实现自动新闻滚动窗口
2006/10/09 PHP
php获取地址栏信息的代码
2008/10/08 PHP
PHP 将图片按创建时间进行分类存储的实现代码
2010/01/05 PHP
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
2019/04/03 PHP
jQuery ready函数滥用分析
2011/02/16 Javascript
浅析return false的正确使用
2013/11/04 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
Javascript基础知识(二)事件
2014/09/29 Javascript
浅谈JavaScript中的字符编码转换问题
2015/07/07 Javascript
JS实现仿QQ效果的三级竖向菜单
2015/09/25 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
JavaScript实现QQ聊天消息展示和评论提交功能
2017/05/22 Javascript
Async Validator 异步验证使用说明
2017/07/03 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
2020/10/29 Javascript
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
Python遍历目录的4种方法实例介绍
2015/04/13 Python
Fiddler如何抓取手机APP数据包
2016/01/22 Python
Python实现运行其他程序的四种方式实例分析
2017/08/17 Python
flask中的wtforms使用方法
2018/07/21 Python
Django框架实现的分页demo示例
2019/05/25 Python
详解python中的异常捕获
2020/12/15 Python
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
铭宣海淘转运:美国、日本、英国转运等全球转运公司
2019/09/10 全球购物
法学院毕业生求职信
2014/06/25 职场文书
银行员工犯错检讨书
2014/09/16 职场文书
质量承诺书格式范文
2015/04/28 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python
详解JAVA的控制语句
2021/11/11 Java/Android
python脚本框架webpy模板控制结构
2021/11/20 Python
使用Python开发冰球小游戏
2022/04/30 Python