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 相关文章推荐
WindowsXP中快速配置Apache+PHP5+Mysql
Jun 05 PHP
php 代码优化的42条建议 推荐
Sep 25 PHP
php imagecreatetruecolor 创建高清和透明图片代码小结
May 15 PHP
php 计划任务 检测用户连接状态
Mar 29 PHP
php输出xml必须header的解决方法
Oct 17 PHP
学习php设计模式 php实现命令模式(command)
Dec 08 PHP
PHP编程入门的基本语法知识点总结
Jan 26 PHP
PHP使用curl模拟post上传及接收文件的方法
Mar 04 PHP
Thinkphp框架开发移动端接口(2)
Aug 18 PHP
PHP图片水印类的封装
Jul 06 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
Apr 10 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获取指定时间段之间的 年,月,天,时,分,秒
2016/06/05 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
php输出文字乱码的解决方法
2019/10/04 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
JS判断元素为数字的奇异写法分享
2012/08/01 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
jQuery的Scrollify插件实现滑动到页面下一节点
2015/07/05 Javascript
javaScript数组迭代方法详解
2016/04/14 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
Openlayers测量距离与面积的实现方法
2020/09/25 Javascript
[02:17]TI4西雅图DOTA2前线报道 啸天mik夫妻档解说
2014/07/08 DOTA
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
python中返回矩阵的行列方法
2018/04/04 Python
python在openstreetmap地图上绘制路线图的实现
2019/07/11 Python
基于Python实现大文件分割和命名脚本过程解析
2019/09/29 Python
Python-opencv 双线性插值实例
2020/01/17 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
2020/02/21 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
2020/04/21 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
几个常见的软件测试问题
2016/09/07 面试题
博士生入学考试推荐信
2013/11/17 职场文书
管理部部长岗位职责
2013/12/05 职场文书
《胡杨》教学反思
2014/02/16 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
教师岗位职责
2015/02/03 职场文书
介绍信怎么写
2015/05/05 职场文书
导游词之张家口
2019/12/13 职场文书