PHP采用curl模仿用户登陆新浪微博发微博的方法


Posted in PHP onNovember 07, 2014

本文实例讲述了PHP采用curl模仿用户登陆新浪微博发微博的方法。分享给大家供大家参考。具体实现方法如下:

现在用php做模仿用户登录我们都会使用到PHP curl函数了,因为只有它才可以实现像用户一样的去访问别人网站了,下面就给大家介绍一下curl登陆新浪微博发微博应用例子。

前天接到一个需求需要模拟登陆微博然后进行发微博,以前干过很多的模拟登录阿里妈妈,微信,还有些其他的内部系统,至今没有出现不能登录的,哈哈,所以也就没有当一回事情,可是当分析新浪的登陆过程的时候才感觉到压力
遇到sha1(sha1(sha1(pwd)).once.servertime) ,肯定都用不了,主要使这个加密算法搞不定所以密码都搞不定别谈登录的,接着就在网上各种找代码,一个小时毫无所获。
是不是我用微博的帐号密码也能登录到新浪邮箱或者其他新浪产品去,感觉希望很大,果然微博的帐号可以直接登录所有的新浪产品,再次访问微博我已经在登录状态了,证明这个有神马用呢?

其实很有用的,一个大公司在一个项目投入的技术和这个项目盈利和前景有很大关系,微博他可以花很大的心思去做,但是其他就不一定,万一找到那个地方的密码没有加密那岂不是很好说了。(PS:对网络安全比较感兴趣,这个方式对黑客来说叫做旁注,旁注就是,当黑客在攻击一个网站的时候,这个网站安全做的非常好,没有什么已知漏洞,攻破难度较大,所以黑客会找找该网站下服务器下其他网站,然后找一个比较容易攻破的,通过这个网站挂马,shell,提权,然后目标网站也就沦陷,以为在同一个服务器,所以….目标就是拿到目标站,无论哪种方法只要拿下就行,很淫荡的想法有没有)

https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)&_=1403138799543简单抓抓包发现密码并没有加密,我们不是能模拟登录了吗? 嗯,其实这里高兴的有点早了
先登录新浪的吧,代码分分钟就搞定了。返回的是一个json数组

$password = $p;

$username = base64_encode($u);

$loginUrl = 'https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)&_=1403138799543';

$loginData['entry'] = 'sso';

$loginData['gateway'] = '1';

$loginData['from'] = 'null';

$loginData['savestate'] = '30';

$loginData['useticket'] = '0';

$loginData['pagerefer'] = '';

$loginData['vsnf'] = '1';

$loginData['su'] = base64_encode($u);

$loginData['service'] = 'sso';

$loginData['sp'] = $password;

$loginData['sr'] = '1920*1080';

$loginData['encoding'] = 'UTF-8';

$loginData['cdult'] = '3';

$loginData['domain'] = 'sina.com.cn';

$loginData['prelt'] = '0';

$loginData['returntype'] = 'TEXT';

//var_dump($loginData);exit;

$login = json_decode(loginPost($loginUrl,$loginData),true);

var_dump($login);exit;function loginPost($url,$data){

global $cookie_file ;

//echo $cookie_file ;exit;

$tmp = '';

if(is_array($data)){

foreach($data as $key =>$value){

$tmp .= $key."=".$value."&";

}

$post = trim($tmp,"&");

}else{

$post = $data;

}

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,$url); 

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($ch,CURLOPT_POST,1);

curl_setopt($ch,CURLOPT_POSTFIELDS,$post);

curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file);

curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file);

$return = curl_exec($ch);

$info = curl_getinfo($ch);

curl_close($ch);

return $return;

}

返回的是一个json数据转成数组即可
array (size=4)

  'retcode' => string '0' (length=1)

  'uid' => string '1920109964' (length=10)

  'nick' => string '毕姥爷讲故事' (length=18)

  'crossDomainUrlList' => 

    array (size=2)

      0 => string 'https://passport.weibo.com/wbsso/login?ticket=ST-MTkyMDEwOTk2NA%3D%3D-1403228192-gz-AB37DC0C18BA3BFCD90AEFAC6115149D&ssosavestate=1434764192' (length=140)

      1 => string 'https://crosdom.weicaifu.com/sso/crosdom?action=login&savestate=1434764192' (length=74)

这个时候说明我们登录成功了,但是其实我们的微博首页的地址并不是weibo,com,而是 http://weibo.com/bipeng0405/home?wvr=5 这样地址,我们怎么获取这个地址了,很简单,直接抓取weibo。com然后他会自动给你跳转回去的,你只需要把跳转的地址记录下来即可
$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,"http://weibo.com"); 

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 

curl_setopt($ch,CURLOPT_COOKIEFILE, $cookie_file); 

curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file); 

$return = curl_exec($ch);

$info = curl_getinfo($ch);

curl_close($ch);

这里还有一个问题,这个时候你可能发现没有跳转到自己微博的首页,这是什么原因呢,可以看看登陆时候有两个连接地址,其中有一个weibo域下的一个地址,猜测应该是进行了cookie的设置所以先获取一边他吧。
get($login['crossDomainUrlList'][0]);

这个代码要在刚才weibo.com获取之前,否则会出现问题的。

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
php adodb介绍
Mar 19 PHP
php设计模式 Decorator(装饰模式)
Jun 26 PHP
php cli 小技巧
Jun 03 PHP
推荐一款PHP+jQuery制作的列表分页的功能模块
Oct 14 PHP
PHP文件上传判断file是否己选择上传文件的方法
Nov 10 PHP
php操作xml入门之xml基本介绍及xml标签元素
Jan 23 PHP
php去除二维数组的重复项方法
Nov 03 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
Dec 24 PHP
php强大的时间转换函数strtotime
Feb 18 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
Apr 25 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 PHP
PHP 超级全局变量相关总结
Jun 30 PHP
php的curl封装类用法实例
Nov 07 #PHP
PHP使用ob_start生成html页面的方法
Nov 07 #PHP
PHP实现HTML生成PDF文件的方法
Nov 07 #PHP
PHP面向对象精要总结
Nov 07 #PHP
PHP使用feof()函数读文件的方法
Nov 07 #PHP
php几个预定义变量$_SERVER用法小结
Nov 07 #PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
Nov 06 #PHP
You might like
PHP的面向对象编程
2006/10/09 PHP
PHP - Html Transfer Code
2006/10/09 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
php经典趣味算法实例代码
2020/01/21 PHP
javascript 学习之旅 (1)
2009/02/05 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
详解React中传入组件的props改变时更新组件的几种实现方法
2018/09/13 Javascript
jQuery实现滑动星星评分效果(每日分享)
2019/11/13 jQuery
JS数组方法join()用法实例分析
2020/01/18 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
python批量提取word内信息
2015/08/09 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
使用darknet框架的imagenet数据分类预训练操作
2020/07/07 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
2020/07/14 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
家庭睡衣和家庭用品:Little Blue House
2018/03/18 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
新学期校长寄语
2014/01/18 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
大学新闻系求职信
2014/06/03 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
车辆年审委托书范本
2014/09/18 职场文书
2014年党员整改措施范文
2014/09/21 职场文书
高中生毕业评语
2014/12/30 职场文书
开学典礼致辞
2015/07/29 职场文书