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 一元分词算法
Nov 30 PHP
php checkdate、getdate等日期时间函数操作详解
Mar 11 PHP
php 提速工具eAccelerator 配置参数详解
May 16 PHP
PHP获取用户的浏览器与操作系统信息的代码
Sep 04 PHP
Yii实现多数据库主从读写分离的方法
Dec 29 PHP
PHP实现抓取Google IP并自动修改hosts文件
Feb 12 PHP
php自定义类fsocket模拟post或get请求的方法
Jul 31 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
Nov 05 PHP
php取出数组单个值的方法
Mar 12 PHP
thinkPHP框架自动填充原理与用法分析
Apr 03 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
May 26 PHP
php实现断点续传大文件示例代码
Jun 19 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 preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
php木马webshell扫描器代码
2012/01/25 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
2019/10/09 PHP
php7连接MySQL实现简易查询程序的方法
2020/10/13 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
jquery 子窗口操作父窗口的代码
2009/09/21 Javascript
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
完美JQuery图片切换效果的简单实现
2016/07/21 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
将Python代码打包为jar软件的简单方法
2015/08/04 Python
Python探索之pLSA实现代码
2017/10/25 Python
浅析Python3爬虫登录模拟
2018/02/07 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
Python Selenium截图功能实现代码
2020/04/26 Python
css3的transform中scale缩放详解
2014/12/08 HTML / CSS
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
什么是GWT的Module
2013/01/20 面试题
金融管理专业求职信
2014/07/10 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
被告答辩状范文
2015/05/22 职场文书
Mongo服务重启异常问题的处理方法
2021/07/01 MongoDB
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技