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 相关文章推荐
常用表单验证类,有了这个,一般的验证就都齐了。
Dec 06 PHP
excellent!――ASCII Art(由目标图象生成ascii)
Feb 20 PHP
PHP 截取字符串专题集合
Aug 19 PHP
input file获得文件根目录简单实现
Apr 26 PHP
PHP使用CURL模拟登录的方法
Jul 08 PHP
PHP常用技巧汇总
Mar 04 PHP
Linux php 中文乱码的快速解决方法
May 13 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
Nov 21 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
Mar 14 PHP
PHP面向对象之事务脚本模式(详解)
Jun 07 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
Oct 13 PHP
PHP策略模式写法
Apr 01 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获取随机数字和字母的方法详解
2013/06/06 PHP
PHP微信开发之微信录音临时转永久存储
2018/01/26 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
JavaScript中的replace()方法使用详解
2015/06/06 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
2017/01/04 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
JS+HTML实现的圆形可点击区域示例【3种方法】
2018/08/01 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
Vue 组件封装 并使用 NPM 发布的教程
2018/09/30 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
教你使用vue-cli快速构建的小说阅读器
2019/05/13 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
2019/11/01 Javascript
Vant picker 多级联动操作
2020/11/02 Javascript
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
python使用Berkeley DB数据库实例
2014/09/26 Python
Python使用Pycrypto库进行RSA加密的方法详解
2016/06/06 Python
Python 获取 datax 执行结果保存到数据库的方法
2019/07/11 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
python Timer 类使用介绍
2020/12/28 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
校园安全检查制度
2014/02/03 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
同学聚会通知书
2015/04/20 职场文书
个人工作决心书
2015/09/22 职场文书
2019企业给员工的慰问信
2019/06/24 职场文书
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS