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程序中的常见漏洞进行攻击
Oct 09 PHP
php学习笔记(三)操作符与控制结构
Aug 06 PHP
php 阴历-农历-转换类代码
Jan 16 PHP
php检测网页是否被百度收录的函数代码
Oct 09 PHP
Drupal简体中文语言包安装教程
Sep 27 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
Jan 04 PHP
Laravel5中contracts详解
Mar 02 PHP
thinkPHP自定义类实现方法详解
Nov 30 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
php读取本地json文件的实例
Mar 07 PHP
PHP中单例模式的使用场景与使用方法讲解
Mar 18 PHP
PHP goto语句用法实例
Aug 06 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中simplexml_load_string函数使用说明
2011/01/01 PHP
php实现socket推送技术的示例
2017/12/20 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
JavaScript 中的日期和时间及表示标准介绍
2013/08/21 Javascript
javascript模块化是什么及其优缺点介绍
2013/09/02 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
简单了解node npm cnpm的具体使用方法
2019/02/27 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
Python正则简单实例分析
2017/03/21 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
解决pip install psycopg2出错问题
2020/07/09 Python
通过实例简单了解python yield使用方法
2020/08/06 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
用html5实现语音搜索框的方法
2014/03/18 HTML / CSS
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
社会学专业学生职业规划书
2014/02/07 职场文书
洗发水广告词
2014/03/13 职场文书
手术室护士节演讲稿
2014/08/27 职场文书
学雷锋活动倡议书
2014/08/30 职场文书
毕业生个人总结
2015/02/28 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
感动中国何玥观后感
2015/06/02 职场文书
党章学习心得体会2016
2016/01/14 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
virtualenv隔离Python环境的问题解析
2022/06/21 Python