用PHP模拟登陆

经常会有人问模拟登陆的问题,其实原理很简单,只要把SessionID保存下来就可以了,今天花了一个小时的时间写了一个函数,供大家参考,网站返回的头信息,具体网站具体分析,源代码:

  1. <?php 
  2. /* 
  3. * 得到网页内容 
  4. * 参数:$host [in] string 
  5. * 主机名称(例如: www.etoow.com) 
  6. * 参数:$method [in] string 
  7. * 提交方法:POST, GET, HEAD … 并加上相应的参数( 具体语法参见 RFC1945,RFC2068 ) 
  8. * 参数:$str [in] string 
  9. * 提交的内容 
  10. * 参数:$sessid [in] string 
  11. * PHP的SESSIONID 
  12. * 
  13. * @返回 网页内容 string 
  14. */ 
  15. function GetWebContent($host$method$str$sessid = ''
  16. $ip = gethostbyname($host); 
  17. $fp = fsockopen($ip, 80); 
  18. if (!$fpreturn
  19. fputs($fp"$methodrn"); 
  20. fputs($fp"Host: $hostrn"); 
  21. if (!emptyempty($sessid)) 
  22. fputs($fp"Cookie: PHPSESSID=$sessid; path=/;rn"); 
  23. if ( substr(trim($method),0, 4) == "POST"
  24. fputs($fp"Content-Length: "strlen($str) . "rn"); // 别忘了指定长度 
  25. fputs($fp"Content-Type: application/x-www-form-urlencodedrnrn"); 
  26. if ( substr(trim($method),0, 4) == "POST"
  27. fputs($fp$str."rn"); 
  28. while(!feof($fp)) 
  29. $response .= fgets($fp, 1024); 
  30. $hlen = strpos($response," "); // LINUX下是 " " 
  31. $header = substr($response, 0, $hlen); 
  32. $entity = substr($response$hlen 4); 
  33. if ( preg_match('/PHPSESSID=([0-9a-z] );/i'$header$matches)) 
  34. $a['sessid'] = $matches[1]; 
  35. if ( preg_match('/Location: ([0-9a-z_?=&#.] )/i'$header$matches)) 
  36. $a['location'] = $matches[1]; 
  37. $a['content'] = $entity
  38. fclose($fp); 
  39. return $a
  40.  
  41. /* 构造用户名,密码字符串 */ 
  42. $str = ("username=test&password=test"); 
  43. $response = GetWebContent("localhost","POST /login.php HTTP/1.0"$str); 
  44. echo $response['location'].$response['content']."<br>"
  45. echo $response['sessid']."<br>"
  46. if ( preg_match('/error.php/i',$response['location'])) 
  47. echo "登陆失败<br>"
  48. else { 
  49. echo "登陆成功<br>"
  50. // 不可以访问user.php,因为不带sessid参数 
  51. $response = GetWebContent("localhost","GET /user.php HTTP/1.0"''''); 
  52. echo $response['location']."<br>"// 结果:error.php?errcode=2 
  53.  
  54. // 可以访问user.php 
  55. $response = GetWebContent("localhost","GET /user.php HTTP/1.0"''$response['sessid']); 
  56. echo $response['location']."<br>"// 结果:user.php 
  57. ?> 
波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 用PHP模拟登陆

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡