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 相关文章推荐
MySQL相关说明
Jan 15 PHP
php中随机显示图片的函数代码
Jun 23 PHP
使用Apache的htaccess防止图片被盗链的解决方法
Apr 27 PHP
PHP设置图片文件上传大小的具体实现方法
Oct 11 PHP
md5 16位二进制与32位字符串相互转换示例
Dec 30 PHP
smarty简单分页的实现方法
Oct 27 PHP
PHP开发注意事项总结
Feb 04 PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 PHP
超强多功能php绿色集成环境详解
Jan 25 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
php+redis实现商城秒杀功能
Nov 19 PHP
PHP7变量处理机制修改
Mar 09 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
解析如何去掉CodeIgniter URL中的index.php
2013/06/25 PHP
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
2016/07/07 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
jquery基础教程之数组使用详解
2014/03/10 Javascript
JS实现点击按钮自动增加一个单元格的方法
2015/03/09 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
JavaScript实现表格点击排序的方法
2015/05/11 Javascript
JavaScript:Date类型全面解析
2016/05/19 Javascript
jquery获取下拉框中的循环值
2017/02/08 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
微信小程序使用npm支持踩坑
2018/11/07 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
2020/09/04 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
2020/09/04 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:EE凭借法力虚空拿下4杀
2017/03/30 DOTA
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
[52:03]Secret vs VG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
python装饰器使用方法实例
2013/11/21 Python
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
python实现汉诺塔方法汇总
2016/07/25 Python
python3利用tcp实现文件夹远程传输
2018/07/28 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
详解python中eval函数的作用
2019/10/22 Python
python带参数打包exe及调用方式
2019/12/21 Python
Python getattr()函数使用方法代码实例
2020/08/10 Python
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
财务内勤岗位职责
2014/04/17 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
mysql使用instr达到in(字符串)的效果
2022/04/03 MySQL
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android