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中create table语句的基本语法是
Jan 15 PHP
鸡肋的PHP单例模式应用详解
Jun 03 PHP
php header功能的使用
Oct 28 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
Jun 12 PHP
Web程序工作原理详解
Dec 25 PHP
php去除二维数组的重复项方法
Nov 03 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
Mar 03 PHP
ThinkPHP项目分组配置方法分析
Mar 23 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
Nov 09 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
Feb 13 PHP
php中pcntl_fork创建子进程的方法实例
Mar 14 PHP
PHP架构及原理知识点详解
Dec 22 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
使用 MySQL 开始 PHP 会话
2006/12/21 PHP
php for 循环语句使用方法详细说明
2010/05/09 PHP
我的php学习笔记(毕业设计)
2012/02/21 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
关于JQuery($.load)事件的用法和分析
2013/04/09 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
详解Node.Js如何处理post数据
2016/09/19 Javascript
AngularJS中watch监听用法分析
2016/11/04 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
2017/01/11 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
Vue自定义指令详解
2017/07/28 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
2018/09/10 Javascript
微信小程序引用iconfont图标的方法
2018/10/22 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
Python中__new__与__init__方法的区别详解
2015/05/04 Python
Python下载指定页面上图片的方法
2016/05/12 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
详解Python文本操作相关模块
2017/06/22 Python
python使用Flask操作mysql实现登录功能
2018/05/14 Python
python3爬取torrent种子链接实例
2020/01/16 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
css3 flex实现div内容水平垂直居中的几种方法
2020/03/27 HTML / CSS
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
微博营销计划书
2014/01/10 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
党校培训学习心得体会
2016/01/06 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书