使用CGI的一个众所周知的主要缺点是Web服务器性能较差.但是基于CGI(主要是基于C/C++)的应用程序有多安全?在C/C++上构建CGI架构是否存在重大安全漏洞?
我想知道一些基于CGI的网络应用/网站的实际实现.我所知道的是javaranch.com.
我有一个最近的问题,Tie :: File证明了我可以用于Perl程序的最佳答案.我已经准备好使用CGI,我需要问:是否有不能在CGI中使用的Perl模块,尤其是Tie :: File?如果有任何并发症,有没有办法调和它们?
我想为PHP脚本创建HTTPURLConnection并获取脚本返回的HTTP响应.有没有办法在Perl中执行此操作?
总之,我希望Perl等效于以下内容:
java.net.URL url = new java.net.URL(urlPath);
java.net.HttpURLConnection conn = (java.net.HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", Integer.toString(body.length()));
conn.setRequestProperty("Cookie", "ONTCred=" + cookie);
conn.connect();
java.io.PrintWriter pw = new java.io.PrintWriter(conn.getOutputStream());
pw.print(body); // "send" the body
pw.flush();
pw.close();
if (conn.getResponseCode() != java.net.HttpURLConnection.HTTP_OK) {
throw new java.io.IOException("Error on POST to " + url + ": " + conn.getResponseMessage());
}
// for debugging, if you want to see the header info, uncomment this section
// for (String key : conn.getHeaderFields().keySet()) {
// System.out.println("header: …Run Code Online (Sandbox Code Playgroud) 我在Perl中有一个CGI脚本,它自己生成HTTP错误页面.我使用以下Apache2配置通过ModPerl :: Registry在mod_perl下运行它:
Alias /perl "/var/www/perl"
<Directory "/var/www/perl">
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options Indexes FollowSymlinks +ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)
一切都很好,除了一个小问题:当标题中打印的HTTP状态不同于200(例如404)时,Apache会将默认的HTML错误文档附加到我自己生成的响应中.
以下面的简单CGI脚本为例:
#!/usr/bin/perl
use strict;
use warnings;
use CGI qw(:standard :escapeHTML -nosticky);
use CGI::Carp qw(fatalsToBrowser);
use Apache2::Const qw(:http :common);
our $cgi = CGI->new();
print $cgi->header(-type=>'text/html', -charset => 'utf-8',
-status=> '404 Not Found');
our $mod_perl_version = $ENV{'MOD_PERL'} ? " $ENV{'MOD_PERL'}" : '';
print <<"EOF";
<html>
<head>
<title>die_error_minimal$mod_perl_version
</head>
<body>
404 error
</body>
</html> …Run Code Online (Sandbox Code Playgroud) 我有一个PYTHON CGI脚本(Content-type:text/plain),大约需要10分钟才能执行.我想在浏览器上看到我的脚本的执行状态.
如下所示:
脚本执行的第1部分......
脚本执行的第2部分..
脚本执行的第3部分..
执行完成
我正在使用print语句,但它只是在脚本完成执行后才将所有print语句全部输出,而不是逐个输出.
请帮忙 ..
我正在尝试为Bugzilla创建一个小型测试服务器,这样我就可以在将它们部署到基于Apache的主服务器之前测试我所做的更改.我最熟悉Python,我想让Python的内置HTTP服务器运行Bugzilla的CGI程序.
不幸的是,Bugzilla拥有的不仅仅是CGI应用程序.它有一堆css和其他直接提供的数据.这意味着处理程序也需要处理这些.我想设置一个WSGI处理程序,它查看请求URL并将请求适当地路由到任何一个Bugzilla CGI脚本或直接从文件系统中提取数据.
有没有更好的方法来完成我想做的事情?如果没有,是否已经有一个WSGI应用程序已经建立了一个CGI环境并通过Python subprocess模块调用CGI应用程序?
对不起,如果我的问题太简单了,我刚开始使用CGI ...所以我有一堆同名的复选框.示例HTML:
<form action="/cgi-bin/checkbox.cgi" method="POST">
<input name="Loc_opt" value="Loc_1" type="checkbox">Option 1<br>
<input name="Loc_opt" value="Loc_2" type="checkbox">Option 2<br>
<input name="Loc_opt" value="Loc_3" type="checkbox">Option 3<br>
<input type="submit" value="Submit">
</form>
Run Code Online (Sandbox Code Playgroud)
我需要找出使用Perl CGI检查哪些.我在checkbox.cgi中有以下内容:
print "Content-type:text/html\r\n\r\n";
local ($buffer, @pairs, $pair, $name, $value, %FORM);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST")
{
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}else {
$buffer = $ENV{'QUERY_STRING'};
}
# Split information into name/value pairs
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value …Run Code Online (Sandbox Code Playgroud) 是否可以在不使用CGI的情况下在Web服务器中运行Perl脚本?
我的意思是,像php脚本(运行任何没有#!/path/to/interpreter行的.pl文件).
如果是,怎么样?
谢谢
如何使用cgi检索"N"个参数?
目前我正在使用下面的代码.但我不知道参数名称.那个案子怎么办呢?
代码:script.cgi
use strict;
use CGI;
my $query = new CGI;
my $paramValue1 = $query->param('name1');
my $paramValue2 = $query->param('name2');
.....
Run Code Online (Sandbox Code Playgroud)
输入网址:
http://host/cgi-bin/script.cgi?name1=value1&name2=value2&.........
Run Code Online (Sandbox Code Playgroud)
产值:
value1,value2,.....
Run Code Online (Sandbox Code Playgroud)
请帮帮我.谢谢.