用PHP模拟登陆
发布:smiling 来源: PHP粉丝网 添加日期:2013-12-10 10:19:31 浏览: 评论:0
经常会有人问模拟登陆的问题,其实原理很简单,只要把SessionID保存下来就可以了,今天花了一个小时的时间写了一个函数,供大家参考,网站返回的头信息,具体网站具体分析,源代码:
- <?php
- /*
- * 得到网页内容
- * 参数:$host [in] string
- * 主机名称(例如: www.etoow.com)
- * 参数:$method [in] string
- * 提交方法:POST, GET, HEAD ... 并加上相应的参数( 具体语法参见 RFC1945,RFC2068 )
- * 参数:$str [in] string
- * 提交的内容
- * 参数:$sessid [in] string
- * PHP的SESSIONID
- *
- * @返回 网页内容 string
- */
- function GetWebContent($host, $method, $str, $sessid = '')
- {
- $ip = gethostbyname($host);
- $fp = fsockopen($ip, 80);
- if (!$fp) return;
- fputs($fp, "$methodrn");
- fputs($fp, "Host: $hostrn");
- if (!emptyempty($sessid))
- {
- fputs($fp, "Cookie: PHPSESSID=$sessid; path=/;rn");
- }
- if ( substr(trim($method),0, 4) == "POST")
- {
- fputs($fp, "Content-Length: ". strlen($str) . "rn"); // 别忘了指定长度
- }
- fputs($fp, "Content-Type: application/x-www-form-urlencodedrnrn");
- if ( substr(trim($method),0, 4) == "POST")
- {
- fputs($fp, $str."rn");
- }
- while(!feof($fp))
- {
- $response .= fgets($fp, 1024);
- }
- $hlen = strpos($response," "); // LINUX下是 " "
- $header = substr($response, 0, $hlen);
- $entity = substr($response, $hlen 4);
- if ( preg_match('/PHPSESSID=([0-9a-z] );/i', $header, $matches))
- {
- $a['sessid'] = $matches[1];
- }
- if ( preg_match('/Location: ([0-9a-z_?=&#.] )/i', $header, $matches))
- {
- $a['location'] = $matches[1];
- }
- $a['content'] = $entity;
- fclose($fp);
- return $a;
- }
- /* 构造用户名,密码字符串 */
- $str = ("username=test&password=test");
- $response = GetWebContent("localhost","POST /login.php HTTP/1.0", $str);
- echo $response['location'].$response['content']."<br>";
- echo $response['sessid']."<br>";
- if ( preg_match('/error.php/i',$response['location']))
- {
- echo "登陆失败<br>";
- } else {
- echo "登陆成功<br>";
- // 不可以访问user.php,因为不带sessid参数
- $response = GetWebContent("localhost","GET /user.php HTTP/1.0", '', '');
- echo $response['location']."<br>"; // 结果:error.php?errcode=2
- // 可以访问user.php
- $response = GetWebContent("localhost","GET /user.php HTTP/1.0", '', $response['sessid']);
- echo $response['location']."<br>"; // 结果:user.php
- }
- ?>
Tags: PHP 模拟 登陆
- 上一篇:用PHP或JS获取图片大小,高宽尺寸
- 下一篇:PHP实现发表文章时自动保存图片
相关文章
- ·PHP 是什么?(2013-11-12)
- ·Php.ini文件位置在哪里 Php.ini文件找不到(2013-11-12)
- ·PHP 数据类型(2013-11-12)
- ·php 获取当前脚本的url(2013-11-12)
- ·php技术生成静态页面的实现(2013-11-13)
- ·缺陷月项目启动 披露PHP脚本语言漏洞(2013-11-13)
- ·在PHP中全面阻止SQL注入式攻击(2013-11-13)
- ·php生成随机密码的几种方法(2013-11-13)
- ·PHP中使用FCKeditor2.3.2配置(2013-11-13)
- ·如何使用PHP开发高效的WEB系统(2013-11-13)
- ·php:树形结构的算法(2013-11-13)
- ·php4和php5区别(2013-11-13)
- ·php数据库连接(2013-11-13)
- ·如何正确理解PHP的错误信息(2013-11-13)
- ·php页面漏洞分析及相关问题解决(2013-11-13)
- ·当在连接PHP时,抱怨一些数值没有定义参考?(2013-11-27)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)