PHP采用curl模仿用户登陆新浪微博发微博的方法
《PHP采用curl模仿用户登陆新浪微博发微博的方法》要点: 本篇章节讲解PHP采用curl模仿用户登陆新浪微博发微博的办法.分享给大家供大家参考.具体实现办法如下:PHP实例 现在用php做模仿用户登录我们都会使用到PHP curl函数了,因为只有它才可以实现像用户一样的去拜访别人网站了,下面就给大家介绍一下curl登陆新浪微博发微博应用例子.PHP实例 前天接到一个需求需要模拟登陆微博然后进行发微博,以前干过很多的模拟登录阿里妈妈,微信,还有些其他的内部系统,至今没有出现不能登录的,哈哈,所以也就没有当一回事情,可是当分析新浪的登陆过程的时候才感觉到压力 其实很有用的,一个大公司在一个项目投入的技术和这个项目盈利和前景有很大关系,微博他可以花很大的心思去做,但是其他就不一定,万一找到那个地方的密码没有加密那岂不是很好说了.(PS:对网络平安比较感兴趣,这个方式对黑客来说叫做旁注,旁注就是,当黑客在攻击一个网站的时候,这个网站平安做的非常好,没有什么已知漏洞,攻破难度较大,所以黑客会找找该网站下服务器下其他网站,然后找一个比较容易攻破的,通过这个网站挂马,shell,提权,然后目标网站也就沦陷,以为在同一个服务器,所以….目标就是拿到目标站,无论哪种方法只要拿下就行,很淫荡的想法有没有)PHP实例 https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)&_=1403138799543简单抓抓包发现暗码并没有加密,我们不是能模拟登录了吗? 嗯,其实这里高兴的有点早了
代码如下:
$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,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$post); curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file); curl_setopt($ch,$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,"http://weibo.com"); curl_setopt($ch,CURLOPT_COOKIEFILE,$cookie_file); curl_setopt($ch,$cookie_file); $return = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch); 这里还有一个问题,这个时候你可能发现没有跳转到自己微博的首页,这是什么原因呢,可以看看登陆时候有两个连接地址,其中有一个weibo域下的一个地址,猜测应该是进行了cookie的设置所以先获取一边他吧.
代码如下:
get($login['crossDomainUrlList'][0]);
这个代码要在刚才weibo.com获取之前,否则会出现问题的. 希望本文所述对大家的PHP程序设计有所赞助.PHP实例 《PHP采用curl模仿用户登陆新浪微博发微博的方法》是否对您有启发,欢迎查看更多与《PHP采用curl模仿用户登陆新浪微博发微博的方法》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |