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安装攻略:常见问题解答(二)
Oct 09 PHP
基于PHP的cURL快速入门教程 (小偷采集程序)
Jun 02 PHP
探讨捕获php错误信息方法的详解
Jun 09 PHP
php5.5中类级别的常量使用介绍
Oct 02 PHP
THINKPHP内容分页代码分享
Jan 14 PHP
PHP之密码加密的几种方式
Jul 29 PHP
详解php设置session(过期、失效、有效期)
Nov 12 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
Mar 17 PHP
程序员的表白神器“520”大声喊出来
May 20 PHP
PHP数据库表操作的封装类及用法实例详解
Jul 12 PHP
php源码的使用方法讲解
Sep 26 PHP
PHP的JSON封装、转变及输出操作示例
Sep 27 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 程序员应该使用的10个组件
2009/10/31 PHP
php基本函数汇总
2015/07/09 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
2016/03/17 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
在textarea中屏蔽js的某个function的javascript代码
2007/04/20 Javascript
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
Javascript 判断客户端浏览器类型代码
2010/03/01 Javascript
JavaScript调用Activex控件的事件的实现方法
2010/04/11 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
javascript数组遍历的方法实例分析
2016/09/13 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
js canvas实现放大镜查看图片功能
2017/06/08 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
vue配置请求本地json数据的方法
2018/04/11 Javascript
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
js实现简单贪吃蛇游戏
2020/05/15 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
Python测试网络连通性示例【基于ping】
2018/08/03 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
CentOS 7下安装Python3.6 及遇到的问题小结
2018/11/08 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
python matplotlib库直方图绘制详解
2019/08/10 Python
tensorflow求导和梯度计算实例
2020/01/23 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
2020/10/19 Python
美国礼品卡商城: Gift Card Mall
2017/08/25 全球购物
个人贷款担保书
2014/04/01 职场文书
幼儿教师寄语集锦
2014/04/03 职场文书
工商行政处罚决定书
2015/06/24 职场文书
2015重阳节座谈会主持词
2015/07/30 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书
PostgreSQL逻辑复制解密原理解析
2022/09/23 PostgreSQL