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学习之PHP变量
Oct 09 PHP
php chr() ord()中文截取乱码问题解决方法
Sep 08 PHP
discuz authcode 经典php加密解密函数解析
Jul 12 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
Jan 27 PHP
PHP array操作10个小技巧分享
Jun 23 PHP
php简单的留言板与回复功能具体实现
Feb 19 PHP
php连接与操作PostgreSQL数据库的方法
Dec 25 PHP
Laravel 5 框架入门(三)
Apr 09 PHP
php如何实现只替换一次或N次
Oct 29 PHP
PHP搭建大文件切割分块上传功能示例
Jan 04 PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
Mar 04 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
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
php双层循环(九九乘法表)
2017/10/23 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
Extjs学习笔记之六 面版
2010/01/08 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
2016/05/10 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
js绘制购物车抛物线动画
2020/11/18 Javascript
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
2016/11/21 NodeJs
jQuery编写设置和获取颜色的插件
2017/01/09 Javascript
vue.js实现备忘录功能的方法
2017/07/10 Javascript
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
Python简单操作sqlite3的方法示例
2017/03/22 Python
python自动12306抢票软件实现代码
2018/02/24 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
Python3.6简单反射操作示例
2018/06/14 Python
Python中应该使用%还是format来格式化字符串
2018/09/25 Python
Django csrf 验证问题的实现
2018/10/09 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
Python笔记之观察者模式
2019/11/20 Python
简单了解python调用其他脚本方法实例
2020/03/26 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
经贸日语专业个人求职信
2013/12/13 职场文书
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
捐助倡议书范文
2014/04/15 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
给客户的检讨书
2014/12/21 职场文书
Nginx反向代理配置的全过程记录
2021/06/22 Servers
Pytest中conftest.py的用法
2021/06/27 Python