论坛: 网站建设 标题: 获取远程主机的网页文件 复制本贴地址    
作者: aoming [aoming]    版主   登录
aoming认为到目前为止,问题已有明确答案,本贴已被冻结,不再接受更多的回复

昨晚上熬了夜,写了个perlcgi程序,针对yuzi论坛系列用来自动显示最新留言的,本机调试已经基本没问题了。但是我调用的帖子不是我自己站上的论坛,而是在http://www.sn163.net/cgi-bin/sodbbs/list.cgi上申请的一个版块的,那个论坛的绝对路径我没法找到(俺这方面太菜了),不知道你们能否帮我搞定一下,找到绝对路径?

以下是程序,感兴趣的朋友也帮忙看看有没有什么值得改进的地方吧,谢谢~~
#!/usr/bin/perl

print"Content-type:text/html\n\n";

open(TITLES,"系统绝对路径/cgi-bin/sodbbs/list/200212071646/bbs");
@titleID=<TITLES>;
close(TITLES);

for($i=1;$i<=3;$i++)
{
open(latest,"系统绝对路径/cgi-bin/sodbbs/list/200212071646/$titleID[$i-1]");
$message=<latest>;
close(latest);

@temp=split(/\t/,$message);
($title[$i],$name[$i])=($temp[0],$temp[2]);
}




print <<EOF;
<TABLE width="100%" border="0" cellspacing="0" cellpadding="0">
<TBODY>

<TR>
<TD height=16><IMG height=6 hspace=8

src="http://image2.sina.com.cn/club/star/images/fans30.gif" width=6></TD>
<TD width="100%">最新留言:<a href=http://www.sn163.net/cgi-bin/sodbbs/bbs.cgi?menu=show&id=200212071646&slttitle=$titleID[0] target=blank>$title[1]</a> ...$name[1]
</TD>
</TR>
<TR>
<TD height=16><IMG height=6 hspace=8

src="http://image2.sina.com.cn/club/star/images/fans30.gif" width=6></TD>
<TD width="100%"> 最新留言:<a href=http://www.sn163.net/cgi-bin/sodbbs/bbs.cgi?menu=show&id=200212071646&slttitle=$titleID[1] target=blank>$title[2]</a> ...$name[2]
</TD>
</TR>
<TR>
<TD height=16><IMG height=6 hspace=8

src="http://image2.sina.com.cn/club/star/images/fans30.gif" width=6></TD>
<TD width="100%"> 最新留言:<a href=http://www.sn163.net/cgi-bin/sodbbs/bbs.cgi?menu=show&id=200212071646&slttitle=$titleID[2] target=blank>$title[3]</a> ...$name[3]
</TD>
</TR>
</TBODY>
</TABLE>


EOF


exit;

[此贴被 Aoming(aoming) 在 04月13日11时53分 编辑过]

地主 发表时间: 2003-01-22 07:37:46

回复: 黄泉 [acheron]   论坛用户   登录
老黄不懂PERL。
在你的程序中:

print <<EOF; 
<TABLE width="100%" border="0" cellspacing="0" cellpadding="0"> 
<TBODY> 

<TR> 
<TD height=16><IMG height=6 hspace=8 

src="http://image2.sina.com.cn/club/star/images/fans30.gif" width=6></TD> 
<TD width="100%">最新留言:<a href=http://www.sn163.net/cgi-bin/sodbbs/bbs.cgi?menu=show&id=200212071646&slttitle=$titleID[0] target=blank>$title[1]</a> ...$name[1]
</TD> 
</TR> 
<TR> 
<TD height=16><IMG height=6 hspace=8 

src="http://image2.sina.com.cn/club/star/images/fans30.gif" width=6></TD> 
<TD width="100%"> 最新留言:<a href=http://www.sn163.net/cgi-bin/sodbbs/bbs.cgi?menu=show&id=200212071646&slttitle=$titleID[1] target=blank>$title[2]</a> ...$name[2]
</TD> 
</TR> 
<TR> 
<TD height=16><IMG height=6 hspace=8 

src="http://image2.sina.com.cn/club/star/images/fans30.gif" width=6></TD> 
<TD width="100%"> 最新留言:<a href=http://www.sn163.net/cgi-bin/sodbbs/bbs.cgi?menu=show&id=200212071646&slttitle=$titleID[2] target=blank>$title[3]</a> ...$name[3]
</TD> 
</TR> 
</TBODY> 
</TABLE> 


红字部分是干什么的呀?尤其是粗体红字部分!




[此贴被 黄泉(acheron) 在 01月22日12时34分 编辑过]

B1层 发表时间: 2003-01-22 12:15:34

回复: yaochi [yaochi]   论坛用户   登录
连接最新地址的吧,不过他没有找到绝对路径,所以还不行

B2层 发表时间: 01/22 12:46

回复: NetDemon [netdemon]   ADMIN   登录
这是不可能的

除非www.sn163.net和你的主机能够用NFS连接,才能这样读取

就算他的绝对路径你知道,比如 /usr/bbs
那你这样读永远都是读你自己主机的 /usr/bbs/ 
而不是远程主机的,因为文件系统是没有哪个主机的概念的,除非NFS--网络文件系统

其实你想想,如果可以这样读的话,你可以读,我也可以读阿,open()有让你写密码的参数吗?谁写个东西就能把别人主机的数据读下来,只要知道绝对路径,那世界不是大乱了。

像这样的解决方法可以这样,用http协议get你要的内容,再作处理,然后显示出来。CPAN有类似的模块,你可以去看看

B3层 发表时间: 01/22 17:56

回复: 夜色撩人 [nightcolor]   版主   登录
不好意思  perl 我是白菜级水准  做个hello word  还可以

B4层 发表时间: 01/22 22:45

回复: aoming [aoming]   版主   登录
非常感谢各位,尤其是老大,:)
———————————————————
这样的解决方法可以这样,用http协议get你要的内容,再作处理,然后显示出来。CPAN有类似的模块,你可以去看看 
——————————————————-—
网络协议方面我菜的像白痴,不过解决问题的方向知道了,也总算是没有绝望,thank u very much~!
a li a duo :)
^o^




B5层 发表时间: 01/23 09:12

回复: aoming [aoming]   版主   登录
最新留言:<a href=http://www.sn163.net/cgi-bin/sodbbs/bbs.cgi?menu=show&id=200212071646&slttitle=$titleID[2] target=blank>$title[3]</a> ...$name[3]

红字部分是干什么的呀?尤其是粗体红字部分!
------------------------------------------
TO 黄泉:
  红色部分其实就是一个普通连接而已,跟
<a href=http://www.20cn.net target=blank>我爱20cn</a>
是一样的
之所以用了“menu=show&id=200212071646&slttitle=$titleID[2] ”是因为向bbs.cgi这个程序提交id=200212071646和slttitle=$titleID的数据
id是俺申请的论坛版块的id代码,而“$titleID[$i]”是我定义的一个数组变量中的一,对于yuzi的论坛设计的,当open函数打开了./list/200212071646/bbs这个记录着一个论坛的帖子的ID的,新的帖子总是bbs文件的头部,我的网页上只需要显示最新的3条就可以了,所以$i是1 to 3
@tileID也就只有3个内容;...$name[$i]是用来表示作者名字的变量

[此贴被 咖啡╃泡面(aoming) 在 01月23日09时35分 编辑过]

B6层 发表时间: 2003-01-23 09:50:35

回复: 乱闯 [stone]   论坛用户   登录
对不起哦!我不会CGI呵呵...ASP可能还能帮上你点!不好意思哦

B7层 发表时间: 01/23 11:03

回复: aoming [aoming]   版主   登录
hehe,不是的乱闯,我原来的意思是通过非法手段找到那个论坛的绝对路径
跟用什么cgi没关系:P

B8层 发表时间: 01/23 15:57

回复: aoming [aoming]   版主   登录
老大,能否再提示一下“用http协议get你要的内容,再作处理,然后显示出来。CPAN有类似的模块,你可以去看看 ”
我查了一下,可是还是不懂什么是CPAN,还有http协议get是什么意思?能否再提示一下?



B9层 发表时间: 01/23 23:50

回复: NetDemon [netdemon]   ADMIN   登录
就是说,你用perl写一个socket的程序,和对方的主机建立连接,把
对方的页面取回来,这样子取回来的是html原码,你继续用perl把文本变换
结果得到你真实想要得到的文本文件

CPAN  =  http://www.CPAN.org/

这里有很多模块,应该能找到能完成这样任务的代码,这样你就不需要自己写
socket这样比较底层的程序了



B10层 发表时间: 01/24 04:26

回复: Aoming [aoming]   版主   登录
ok,解决了
-----------------------------
#!/usr/bin/perl
use LWP::Simple;
$url = 'http://www.20cn.org/index.html';
$html = get $url;
print "content-type:/txt\n\n";
print $html;

[此贴被 Aoming(aoming) 在 10月24日11时29分 编辑过]

B11层 发表时间: 06/02 19:19

论坛: 网站建设

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号