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下获取客户端ip地址的函数
Mar 15 PHP
使用XDebug调试及单元测试覆盖率分析
Jan 27 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
Jun 13 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
Jun 21 PHP
PHP 使用pcntl和libevent 实现Timer功能
Oct 27 PHP
浅析PHP编程中10个最常见的错误
Aug 08 PHP
PHP时间和日期函数详解
May 08 PHP
PHP中通过trigger_error触发PHP错误示例
Jun 23 PHP
windows8.1下Apache+Php+MySQL配置步骤
Oct 30 PHP
PHP浮点比较大小的方法
Feb 14 PHP
php连接oracle数据库的核心步骤
May 26 PHP
PHP抽象类与接口的区别详解
Mar 21 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+MYSQL 出现乱码的解决方法
2008/08/08 PHP
php 数组排序 array_multisort与uasort的区别
2011/03/24 PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
2013/06/25 PHP
PHP实现HTML页面静态化的方法
2015/11/04 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
2015/11/17 PHP
php计算年龄精准到年月日
2015/11/17 PHP
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
JS判断当前页面是否在微信浏览器打开的方法
2015/12/08 Javascript
jquery实现图片预加载
2015/12/25 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
浅谈Node.js:理解stream
2016/12/08 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
JS实现评价的星星功能
2017/08/20 Javascript
JavaScript防止全局变量污染的方法总结
2018/08/02 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
[02:07]2018DOTA2亚洲邀请赛主赛事第三日五佳镜头 fy极限反杀
2018/04/06 DOTA
用Python进行TCP网络编程的教程
2015/04/29 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
Python理解递归的方法总结
2019/01/28 Python
python实现转圈打印矩阵
2019/03/02 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
python实现简单图书管理系统
2019/11/22 Python
在使用非全零作为空指针内部表达的机器上, NULL是如何定义
2014/11/09 面试题
毕业生求职简历的自我评价
2013/10/07 职场文书
应届毕业生求职信范文
2013/12/18 职场文书
财务部出纳岗位职责
2013/12/22 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
作风建设年度心得体会
2014/10/29 职场文书
小学四年级学生评语
2014/12/26 职场文书
中学政教处工作总结
2015/08/13 职场文书
JS中如何优雅的使用async await详解
2021/10/05 Javascript
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android