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 相关文章推荐
简单采集了yahoo的一些数据
Feb 14 PHP
理解PHP5中static和const关键字的区别
Mar 19 PHP
台湾中原大学php教程孙仲岳主讲
Jan 07 PHP
php echo 输出字符串函数详解
May 13 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
Jun 30 PHP
PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
Apr 27 PHP
codeigniter实现get分页的方法
Jul 10 PHP
php session 写入数据库
Feb 13 PHP
CI框架文件上传类及图像处理类用法分析
May 18 PHP
PHP中模糊查询并关联三个select框
Jun 19 PHP
Laravel5.5新特性之友好报错以及展示详解
Aug 13 PHP
php实现的AES加密类定义与用法示例
Jan 29 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随机生成福彩双色球号码的2种方法
2013/02/04 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
thinkphp模板用法和内容输出实例
2014/11/28 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
利用js获取服务器时间的两个简单方法
2010/01/08 Javascript
基于JavaScript自定义构造函数的详解说明
2013/04/24 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
ashx文件获取$.ajax()方法发送的数据
2016/05/26 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
vue实现百度搜索下拉提示功能实例
2017/06/14 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
解决VUE双向绑定失效的问题
2019/10/29 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
详解Python中heapq模块的用法
2016/06/28 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
2017/01/24 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
pandas 层次化索引的实现方法
2019/07/06 Python
python烟花效果的代码实例
2020/02/25 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
Python实现Keras搭建神经网络训练分类模型教程
2020/06/12 Python
ORACLE十问
2015/04/20 面试题
成人大专生实习期的自我评价
2013/10/02 职场文书
设计师个人求职信范文
2014/02/02 职场文书
汽车广告策划方案
2014/05/31 职场文书
无刑事犯罪记录证明范本
2014/09/29 职场文书
2014年药店店长工作总结
2014/11/17 职场文书
新教师教学工作总结
2015/08/14 职场文书
2016大学军训心得体会
2016/01/11 职场文书
班干部竞选演讲稿(精选5篇)
2019/09/24 职场文书
vue2实现provide inject传递响应式
2021/05/21 Vue.js
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL
一小时迅速入门Mybatis之bind与多数据源支持 Java API
2021/09/15 Javascript