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 相关文章推荐
Extended CHM PHP 语法手册之 DIY
Oct 09 PHP
PHP中的正规表达式(二)
Oct 09 PHP
Smarty+QUICKFORM小小演示
Feb 25 PHP
php 正则 过滤html 的超链接
Jun 02 PHP
php header示例代码(推荐)
Sep 08 PHP
解析php多线程下载远程多个文件
Jun 25 PHP
PHP中$_FILES的使用方法及注意事项说明
Feb 14 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 PHP
php验证session无效的解决方法
Nov 04 PHP
再谈PHP中单双引号的区别详解
Jun 12 PHP
PHP对称加密函数实现数据的加密解密
Oct 27 PHP
PHP简单实现解析xml为数组的方法
May 02 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利用str_replace防注入的方法
2013/11/10 PHP
php对称加密算法示例
2014/05/07 PHP
PHP中SimpleXML函数用法分析
2014/11/26 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
PHP+JQUERY操作JSON实例
2017/03/23 PHP
PHP echo()函数讲解
2019/02/15 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
Nodejs下DNS缓存问题浅析
2016/11/16 NodeJs
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
node中modules.exports与exports导出的区别
2018/06/08 Javascript
通过JavaScript下载文件到本地的方法(单文件)
2019/03/17 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Python基于回溯法子集树模板解决找零问题示例
2017/09/11 Python
python使用json序列化datetime类型实例解析
2018/02/11 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
2019/12/26 Python
Python定义函数实现累计求和操作
2020/05/03 Python
python中os包的用法
2020/06/01 Python
树莓派4B安装Tensorflow的方法步骤
2020/07/16 Python
HTML5 canvas基本绘图之图形组合
2016/06/27 HTML / CSS
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
员工自我鉴定
2013/10/09 职场文书
仓库门卫岗位职责
2013/12/22 职场文书
党的群众路线教育实践活动心得体会(企业)
2014/11/03 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
高一军训感想
2015/08/07 职场文书
安全教育主题班会总结
2015/08/14 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书