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模拟HTTP认证
Oct 09 PHP
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
Dec 11 PHP
新手菜鸟必读:session与cookie的区别
Aug 22 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
php实现按照权重随机排序数据的方法
Jan 09 PHP
php生成二维码
Aug 10 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 PHP
php查询操作实现投票功能
May 09 PHP
thinkphp3.x中session方法的用法分析
May 20 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
May 27 PHP
tp5 sum某个字段相加得到总数的例子
Oct 18 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
拼音码表的生成
2006/10/09 PHP
用PHP实现小型站点广告管理
2006/10/09 PHP
比较全的PHP 会话(session 时间设定)使用入门代码
2008/06/05 PHP
封装一个PDO数据库操作类代码
2009/09/09 PHP
PHP 全角转半角实现代码
2010/05/16 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
2013/07/05 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
一个简单的php路由类
2016/05/29 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
jquery mobile界面数据刷新的实现方法
2016/05/28 Javascript
JS文件上传神器bootstrap fileinput详解
2021/01/28 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
vue 2.0 购物车小球抛物线的示例代码
2018/02/01 Javascript
js实现图片推拉门效果代码实例
2019/05/18 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
Python中的pack和unpack的使用
2018/03/12 Python
将python安装信息加入注册表的示例
2019/11/20 Python
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
百联网上商城:i百联
2017/01/28 全球购物
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
英国的领先快速时尚零售商:In The Style
2019/03/25 全球购物
介绍一下write命令
2014/08/10 面试题
英语专业求职信
2014/07/08 职场文书
幼儿园大班区域活动总结
2014/07/09 职场文书
小学班级特色活动方案
2014/08/31 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
总经理年会致辞
2015/07/29 职场文书
Django cookie和session的应用场景及如何使用
2021/04/29 Python