再次提问,如何模拟登录网页,从而获取登录后的html代码

phpro 2005-10-09 01:05:12
例如登录某个Discuz型的论坛,IE可以设置几个月时间的COOKIES打开论坛就缺省登录了,而登录与否帖子的显示是不同的,比如登录后可以下载附件,未登录就无法浏览附件。

请问各位兄弟,如何才能模拟登录了论坛,用PHP获得登录后所浏览的帖子的页面html代码?

举个例子,我想获得多个bbs.pdafans.com的漫画下载链接
...全文
1686 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
phpro 2006-03-05
  • 打赏
  • 举报
回复
自己已经php解决,这个问题继续留一段时间,大家继续讨论
phpro 2006-02-21
  • 打赏
  • 举报
回复
用php没有解决,但用c#已经解决了,请精通php的大侠提供完整的php例子,谢谢
Meteorlet 2005-11-17
  • 打赏
  • 举报
回复
怎么这么简单的问题还没有搞定?
我给出的只是例子,登陆是不是成功每个网站的做法都不一样的,我的例子里
出错会重定向到error.php页面去,而且其他网站可能不是重定向而是输出错误信息,
搜索错误字符串就可以了。
lisoon 2005-11-17
  • 打赏
  • 举报
回复
取http头。
不过只能取得一些。

<script>

var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
xmlhttp.open("post","http://bbs.pdafans.com/logging.php?action=login",false)
xmlhttp.send()
if (xmlhttp.readyState==4)
document.write("<textarea cols=50 rows=10>"+xmlhttp.getAllResponseHeaders()+"</textarea>")

</script>
peterdoo 2005-11-17
  • 打赏
  • 举报
回复
mark
piner 2005-11-16
  • 打赏
  • 举报
回复
用iris
phpro 2005-11-16
  • 打赏
  • 举报
回复
找个http监听工具
------------------------
请给个具体链接好吗?找不到呀。

您可以帮我解决这个问题吗?谢谢了。Q我103571306或SMS我13423522244
-神仙- 2005-11-13
  • 打赏
  • 举报
回复
找个http监听工具
phpro 2005-11-12
  • 打赏
  • 举报
回复
用IE情况下有什么工具查看header的?谢谢。
yyc520 2005-10-15
  • 打赏
  • 举报
回复
经过同学同意,可以发表.
我们也是新手,希望高手能完善这个代理程序的图片处理部分,链接替换功能!

谢谢!



<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<!--
编写日期:2005-9-20-----2005-9-30
作者:湘潭大学信息工程学院计算机科学与技术专业2004级计算机五班伍侃&易岳城
说明:本程序仅实现大部分的功能,对图片处理没有做过多细致的工作.欢迎大家修改,但请不要删除本段注释.
-->
<?php
////////////////////////////认证处理
//if(md5($dxtu)!=$mxtu)
//{
// header('location: ../enter.php');
// exit();
//}
$time1=time();

////////////////////////////变量定义
// http://localhost/bbs/faq.php?page=usermaint&myid=123456789#6

$host=""; //目标地址的HOST名 如localhost
$path=""; //目标的PATH 如/bbs/faq.php
$link=""; //目标的LINK 如/bbs/faq.php?page=usermaint&myid=123456789#6
$cookieval=""; //从用户得到的cookie数组,将发给学校
$postval=""; //从用户得到的POST字符串,将发给学校
$headers=""; //从目标得到的头信息
$html=""; //从目标得到的HTML内容
$port=80; //目标的端口号
$ip="127.0.0.1"; //目标的IP
$filename=""; //目标的文件名

///////////////////////////链接部分链接的信息
$serverpath="http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?enter="; //提供链接的路径
$collegepath="";
$schoolpath="";
if(!isset($enter))
$url="http://localhost/bbs/";
else $url=$enter;


/**************************
对url安全处理
****************************/
function safe($a)
{
$a=addslashes($a);
$a=str_replace("_","\_",$a);
$a=str_replace("%","\%",$a);
return $a;
}


/**************************
对目标的ip进行过滤
****************************/
function Allow($ip)
{
////////////////////////////////////////////////////////////////
$schoolnet=array("127.0.0.1");
if(!in_array($ip,$schoolnet))
{ error_messages("您所请求的页面不在可访问列表!");
exit();
}

}


/**************************
发送错误信息
****************************/
function error_messages($why)
{
echo $why;
exit();

}


/**************************
处理所有的url
****************************/
function DealURL()
{
global $url,$host,$path,$link,$schoolpath,$collegepath,$serverpath,$port,$ip,$filename;

/////////////////////处理url得到安全正确的url
$url= preg_replace("/(.*?)['\"](.*?)['\"](.*?)/is","\\2",$url);
$url=str_replace('\\',"",$url);
$url = preg_replace("/ /i", "%20", $url);
$url=safe($url);
$url = preg_replace("/\/\//i", "/", $url);
$url = preg_replace("/:\//i", "://", $url);
//////////////////////得到HOST,IP,处理目标IP是否在可访问列表中
$urlparsed=parse_url($url);
$host=$urlparsed['host'];
$ip=gethostbyname($host);
// Allow($ip);
if(isset($urlparsed['path']))
$path=$urlparsed['path'];


//////////////////////处理得到path中的目录
$array=explode("/",$path);
$dir="";
$filename="";
foreach($array as $k=>$v)
{
if($k<count($array)-1)
$dir=$dir.$v."/";
elseif(strrpos($v, ".")==true)
{
$filename=$v;
break;
}
else $dir=$dir.$v."/";
}
$path=$dir.$filename;


////////////////////得到LINK
if(isset($urlparsed['port']))
$port=$urlparsed['port'];
else $port=80;
$link="";
if(isset($urlparsed['query']))
{
$link.="?$urlparsed[query]";
}
if(isset($urlparsed['fragment']))
{
$link.="#$urlparsed[fragment]";
}
$link=$path.$link;

////////////////////得到学校的dir,不包括文件名
$schoolpath="http://$host:$port".$dir;


////////////////////得到院的dir,不包括文件名,不过要加上学校的IP
$urlparsed=parse_url($serverpath);
$serverhost=$urlparsed['host'];
$tmp_path=$urlparsed['path'];
$array=explode("/",$tmp_path);
$tmp_dir="";
$tmp_filename="";
foreach($array as $k=>$v)
{
if($k<count($array)-1)
$tmp_dir=$tmp_dir.$v."/";
elseif(strrpos($v, ".")==true)
{
$tmp_filename=$v;
break;
}
else $tmp_dir=$tmp_dir.$v."/";
}
$tmp_path=$tmp_dir.$tmp_filename;

$collegepath="http://$serverhost".$tmp_dir."$ip/";
}


/**************************
从用户得到的cookie放到数组中去
****************************/
function FetchCookie()
{
global $cookieval;
$cookieval=$_COOKIE;

}


/**************************
从用户得到的POST组成一字符串
****************************/
function FetchPost()
{
global $postval,$length;
$postval="";
$length=0;
if(count($_POST)>0)
{
foreach($_POST as $k=>$v)
{
$postval .=urlencode($k)."=".urlencode($v)."&";
}
$postval=substr($postval,0,-1);
}
$length=strlen($postval);
}
yyc520 2005-10-14
  • 打赏
  • 举报
回复
我用我的代理程序登陆bbs.pdafans.com成功!
yyc520 2005-10-14
  • 打赏
  • 举报
回复
用网页代理的思想,很容易就能登上去!
不过,具体代码我没时间写.

你吧他的代码放在你的服务器上,自己登自己的,若能登成功,那么你吧哪个登陆页面的session,cookie 都打印出来,再用下面代码发送出去,至于如何吧
session,cookie 装入数组,那就是你的事了!

function HttpRequire()
{
global $host,$path,$url,$cookieval,$postval,$length,$headers,$html,$link,$port;


/////////////////连上指定端口并发送构造的HTTP报文
$fp = fsockopen($host, $port, $errno, $errstr, 30);
if (!$fp)
{
echo "$errstr ($errno)<br />\n";
exit();
}
else
{
$out = "POST $link HTTP/1.0\r\n";
$out .= "Host: $host\r\n";
$out .= "User-Agent: Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)\r\n";
$out .= "Referer: $url\r\n";
if(count($cookieval)>0)
{

foreach($cookieval as $k=>$v)
{
$out .= "Cookie: $k=$v;\r\n";

}
}
$out .= "Content-Type: application/x-www-form-urlencoded\r\n";
$out .= "Content-Length: $length\r\n";
$out .= "\r\n";
$out .= $postval;
}
fwrite($fp, $out);
$fheader=1;$headers="";$html="";$line="";
while (!feof($fp))
{
$line=fgets($fp, 128);
if($fheader==1)
{
if($line=="\r\n")
$fheader=0;
else
$headers.=$line;
}
else
{
$html.=$line;
}
}
fclose($fp);

}


以上代码是一个网页代理程序的部分,全部代码是我和我同学写的!没好处不给,也没必要给,你说是不!
phpro 2005-10-14
  • 打赏
  • 举报
回复
Meteorlet(www.dictworld.com) 兄,请帮看看以上调用程序有什么不足?
phpro 2005-10-12
  • 打赏
  • 举报
回复
我试着运行如下代码,可是不成功
/* 构造用户名,密码字符串 */
$str = ("action=login&formhash=be21cb66&referer=index.php&cookietime=2592000&username=testphp&password=123456"); //准备传输登录参数

$response = GetWebContent("bbs.pdafans.com","POST /logging.php HTTP/1.0", $str,""); //调用GetWebContent函数
echo $response['location'].$response['content']."<br>"; //显示登录后结果
echo $response['sessid']."<br>"; //显示Session ID号
if ( preg_match('/error\.php/i',$response['location']))
{
echo "登陆失败<br>";
} else {
echo "登陆成功<br>";
// 不可以访问user.php,因为不带sessid参数
$response = GetWebContent("bbs.pdafans.com","GET /viewthread.php HTTP/1.0", 'tid=14020', '');
echo $response['location']."<br>"; // 结果:error.php?errcode=2

// 可以访问user.php
$response = GetWebContent("bbs.pdafans.com","GET /viewthread.php HTTP/1.0", 'tid=14020', $response['sessid']);
echo $response['location']."<br>"; // 结果:user.php
}

请帮看看有什么不足?
  • 打赏
  • 举报
回复
同意 piner(nadmin 简称难民) 的使用curl扩展来模拟post和get操作比较简单!
详细参考手册,另外,PEAR的手册在 pear.php.net 中有下载或者在线看。
piner 2005-10-11
  • 打赏
  • 举报
回复
使用php的扩展模块curl库比较简单
phpro 2005-10-11
  • 打赏
  • 举报
回复
Meteorlet(www.dictworld.com)兄,谢谢您的指导,可以我不知该如何调用您的函数。

可以给出以下这个例子的具体函数调用代码吗?谢谢。

代码目的,获取pdafans的漫画链接。
登录页面:http://bbs.pdafans.com/logging.php?action=login
用户名:testphp
口令:123456
欲获取的html代码的页面:http://bbs.pdafans.com/viewthread.php?tid=14020&extra=page%3D1

谢谢。
phpro 2005-10-11
  • 打赏
  • 举报
回复
mrshelly(Shelly) 兄,有无PEAR 里 HTTP 类的中文用户手册或简要说明?
phpro 2005-10-11
  • 打赏
  • 举报
回复
live http header要Mozilla浏览器才行吗?如何使用?xpi是什么文件?
Meteorlet 2005-10-11
  • 打赏
  • 举报
回复
又有人问这种问题
http://www.tianjiaonet.com/blog.php?aid=7&BlogID=1
加载更多回复(13)

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧