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不用正则采集速度探究总结
Mar 24 PHP
PHP中去掉字符串首尾空格的方法
May 19 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
Jun 25 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
Dec 01 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
Mar 17 PHP
PHP文件上传类实例详解
Apr 08 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
Jun 12 PHP
PHP 7.1新特性的汇总介绍
Dec 16 PHP
php技巧小结【推荐】
Jan 19 PHP
php字符集转换
Jan 23 PHP
php 开发中加密的几种方法总结
Mar 22 PHP
JS操作XML中DTD介绍及使用方法分析
Jul 04 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 微信扫码支付源代码(推荐)
2016/11/03 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
2017/04/19 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
2010/04/01 Javascript
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
2010/12/03 Javascript
jquery中实现标签切换效果的代码
2011/03/01 Javascript
JavaScript实现复制功能各浏览器支持情况实测
2013/07/18 Javascript
javascript右下角弹层及自动隐藏(自己编写)
2013/11/20 Javascript
30个经典的jQuery代码开发技巧
2014/12/15 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
2015/08/28 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
在vue中给列表中的奇数行添加class的实现方法
2018/09/05 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
Nuxt的动态路由和参数校验操作
2020/11/09 Javascript
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
python的unittest测试类代码实例
2017/12/07 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
django项目中使用手机号登录的实例代码
2019/08/15 Python
Python.append()与Python.expand()用法详解
2019/12/18 Python
使用Python发现隐藏的wifi
2020/03/04 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
html5 button autofocus 属性介绍及应用
2013/01/04 HTML / CSS
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
升学宴主持词
2014/04/02 职场文书
2014年教师节演讲稿范文
2014/09/10 职场文书
信访稳定工作汇报
2014/10/27 职场文书
小学生节水倡议书
2015/04/29 职场文书
恋恋笔记本观后感
2015/06/16 职场文书
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle
浅谈克隆 JavaScript
2021/11/02 Javascript
根德5570型九灯四波段立体声收音机是电子管收音机的楷模 ? 再论5570
2022/04/05 无线电