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 相关文章推荐
杏林同学录(八)
Oct 09 PHP
PHP中文汉字验证码
Apr 08 PHP
PHP 文件上传进度条的两种实现方法的代码
Nov 25 PHP
在windows服务器开启php的gd库phpinfo中未发现
Jan 13 PHP
解析左右值无限分类的实现算法
Jun 20 PHP
php5.2以下版本无json_decode函数的解决方法
May 25 PHP
PHP微框架Dispatch简介
Jun 12 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
Jun 19 PHP
WordPress中调试缩略图的相关PHP函数使用解析
Jan 07 PHP
PHP使用Redis替代文件存储Session的方法
Feb 15 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 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 filter_var() 函数 Filter 函数
2012/04/25 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
如何利用PHP实现上传图片功能详解
2020/09/24 PHP
JQuery toggle使用分析
2009/11/16 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
利用node.js实现反向代理的方法详解
2017/07/24 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
JS闭包经典实例详解
2018/12/20 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
2019/06/24 Javascript
微信小程序3种位置API的使用方法详解
2019/08/05 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
jquery实现广告上下滚动效果
2021/03/04 jQuery
[02:54]辉夜杯主赛事第二日败者组 iG.V赛后采访
2015/12/26 DOTA
python 自动提交和抓取网页
2009/07/13 Python
Python中的__SLOTS__属性使用示例
2015/02/18 Python
Python编程之多态用法实例详解
2015/05/19 Python
python实现音乐下载的统计
2018/06/20 Python
python实现机器学习之多元线性回归
2018/09/06 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
PyTorch中Tensor的拼接与拆分的实现
2019/08/18 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
Python tornado上传文件的功能
2020/03/26 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
python如何实现递归转非递归
2021/02/25 Python
巴西图书和电子产品购物网站:Saraiva
2017/06/07 全球购物
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
石油大学毕业生自荐信
2014/01/28 职场文书
中央空调节能方案
2014/06/15 职场文书
承兑汇票延期证明
2015/06/23 职场文书
致三级跳运动员加油稿
2015/07/21 职场文书
python脚本框架webpy的url映射详解
2021/11/20 Python
解决flex布局中子项目尺寸不受flex-shrink限制
2022/05/11 HTML / CSS