我正在运行一个CGI脚本来阻止安全设备中的地址(使用wget命令),我想在加载过程中弹出一个确认框并询问是/否问题,如果答案是否--exit并且如果答案是肯定继续阻止该地址。有任何想法吗?
#!/usr/bin/perl -w
use CGI qw(:standart escapeHTML);
use CGI qw(:param);
use LWP::Simple;
$pass ='xxxxxx';
$rip = param('ip');
$addr=$ENV{'REMOTE_ADDR'};
print "Content-type: text/html \n\n";
print "<html>";
print "<head> <title>Block IP </title></head>";
print "<body>";
if($rip=~m/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/)
{
system("wget \'https://x.x.x.x/policy/test?
deviceuser=user1&passd=$password&ip=$rip&policy=Quar_1D\' -O \/dev\/null --no-
check-certificate 2>&1 | grep response -A 3");
print "<script type='text/javascript'>";
}
else
{
if(!$rip)
{
print '<script type=\'text/javascript\'>
var gip=prompt(\'enter an ip to block\',\'\');
if (!gip) {
window.location=\'http://x.x.x.x/cgi-bin/block.cgi\';
} else {
window.location="http://x.x.x.x/cgi-bin/block_tp.cgi?ip="+gip;
}';
}
}
print "</script></body></html>";
答案 0 :(得分:4)
这个问题显示了对HTTP交互如何工作的基本误解。 HTTP是无状态协议。客户端(可能是浏览器)发送请求,服务器发送响应。下一个请求/响应周期与前一个请求/响应周期没有任何关联,除非开发人员做了一些事情来存储有关状态的信息使用简单的CGI机制,您无法获得处理请求的中途,然后停止向用户询问更多信息。
通过编写Javascript并向Web服务器发出Ajax请求,您可能想要的是什么。但鉴于您对Web开发的了解程度,我强烈建议您聘请程序员或花一年左右的时间来完成此任务。
此外,您的CGI计划中还有一些奇怪的事情发生。
-w
代替更现代的use warnings
。use strict
(因此,您不会声明任何变量)。:standard
错误(但是您还没有使用任何标准功能)。escapeHTML
但从未使用它。wget
。wget
的结果,您什么都不做。