PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发


Posted in PHP onJanuary 16, 2012
/** 
* CURL请求 
* @param String $url 请求地址 
* @param Array $data 请求数据 
*/ 
function curlRequest($url,$data='',$cookieFile=''){ 
$ch = curl_init(); 
$option = array( 
CURLOPT_URL => $url, 
CURLOPT_HEADER =>0, 
CURLOPT_RETURNTRANSFER => 1, 
); 
if($cookieFile){ 
$option[CURLOPT_COOKIEJAR] = $cookieFile; 
$option[CURLOPT_COOKIEFILE] = $cookieFile; 
//$option[CURLOPT_COOKIESESSION] = true; 
//$option[CURLOPT_COOKIE] = 'prov=42;city=1'; 
} 
if($data){ 
$option[CURLOPT_POST] = 1; 
$option[CURLOPT_POSTFIELDS] = $data; 
} 
curl_setopt_array($ch,$option); 
$response = curl_exec($ch); 
if(curl_errno($ch) > 0){ 
throw_exception("CURL ERROR:$url ".curl_error($ch)); 
} 
curl_close($ch); 
return $response; 
} 
function login($username,$password){ 
if($username && $password){ 
$preLoginData = curlRequest('http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su='.base64_encode($username).'&client=ssologin.js(v1.3.16)','',self::COOKIE_FILE); 
preg_match('/sinaSSOController.preloginCallBack\((.*)\)/',$preLoginData,$preArr); 
$jsonArr = json_decode($preArr[1],true); 
if(is_array($jsonArr)){ 
$postArr = array( 
'entry' => 'weibo', 
'gateway' => 1, 
'from' => '', 
'savestate' => 7, 
'useticket' => 1, 
'ssosimplelogin' => 1, 
'su' => base64_encode(urlencode($username)), 
'service' => 'miniblog', 
'servertime' => $jsonArr['servertime'], 
'nonce' => $jsonArr['nonce'], 
'pwencode' => 'wsse', 
'sp' => sha1(sha1(sha1($password)).$jsonArr['servertime'].$jsonArr['nonce']), 
'encoding' => 'UTF-8', 
'url' => 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack', 
'returntype' => 'META' 
); 
$loginData = curlRequest('http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.16)',$postArr,self::COOKIE_FILE); 
if($loginData){ 
$matchs = array(); 
preg_match('/replace\(\'(.*?)\'\)/',$loginData,$matchs); 
$loginResult = curlRequest($matchs[1],'',self::COOKIE_FILE); 
$loginResultArr = array(); 
preg_match('/feedBackUrlCallBack\((.*?)\)/',$loginResult,$loginResultArr); 
//$userInfo = json_decode($loginResultArr[1],true); 
//Log::info(var_export($loginResultArr[1])); 
}else{ 
throw_exception('Login sina fail.'); 
} 
}else{ 
throw_exception($preLoginData); 
} 
}else{ 
throw_exception('Param error.'); 
} 
}
PHP 相关文章推荐
用PHP将数据导入到Foxmail的实现代码
Sep 05 PHP
用php的ob_start来生成静态页面的方法分析
Mar 09 PHP
探讨PHP中OO之静态关键字以及类常量的详解
Jun 07 PHP
利用curl 多线程 模拟 并发的详解
Jun 14 PHP
php正则表达式获取内容所有链接
Jul 24 PHP
10款实用的PHP开源工具
Oct 23 PHP
抛弃 PHP 代价太高
Apr 26 PHP
php简单的上传类分享
May 15 PHP
php进程daemon化的正确实现方法
Sep 06 PHP
对laravel的session获取与存取方法详解
Oct 08 PHP
phpmyadmin在宝塔面板里进不去的解决方案
Jul 06 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 23 PHP
php 阴历-农历-转换类代码
Jan 16 #PHP
yii框架中的Url生产问题小结
Jan 16 #PHP
fgetcvs在linux的问题
Jan 15 #PHP
PHP异步调用socket实现代码
Jan 12 #PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
Jan 12 #PHP
PHP警告Cannot use a scalar value as an array的解决方法
Jan 11 #PHP
Trying to clone an uncloneable object of class Imagic的解决方法
Jan 11 #PHP
You might like
请php正则走开
2008/03/15 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
基于jquery的文字向上跑动类似跑马灯的效果
2014/09/22 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
2016/03/24 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
JS拖动选择table里的单元格完整实例【基于jQuery】
2019/05/28 jQuery
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
python 根据正则表达式提取指定的内容实例详解
2016/12/04 Python
Python有序查找算法之二分法实例分析
2017/12/11 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
Python3.5运算符操作实例详解
2019/04/25 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
使用python获取邮箱邮件的设置方法
2019/09/20 Python
使用Pycharm分段执行代码
2020/04/15 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
python 调用Google翻译接口的方法
2020/12/09 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
乐观大学生的自我评价
2014/01/10 职场文书
CAD制图人员的自荐信
2014/02/07 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
科学发展观活动总结
2014/08/28 职场文书
2019广播稿怎么写
2019/04/17 职场文书
教你如何使用Python实现二叉树结构及三种遍历
2021/06/18 Python
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL