Qual é a diferença entre pré ($ Env {'Query_string}) e ($ cgi-> param ())?
-
24-09-2019 - |
Pergunta
Para um script Perl CGI, qual é a diferença (tecnicamente) entre esses dois?
#!/usr/bin/perl
use CGI;
$cgi = new CGI;
print $cgi->header(),
$cgi->start_html(),
$cgi->pre($cgi->param()),
$cgi->end_html();
e
#!/usr/bin/perl
use CGI;
$cgi = new CGI;
print $cgi->header(),
$cgi->start_html(),
$cgi->pre($ENV{'QUERY_STRING'}),
$cgi->end_html();
Solução
Suponha uma solicitação HTTP como esta:
GET my.cgi?foo=bar&baz=buz
Quando executado sob um servidor da web com uma interface CGI convencional, a variável de ambiente query_string será foo=bar&baz=buz
. A variável ambiental não será usada por URL. Imprimindo com $cgi->pre(...)
Simplesmente envolverá o Env var com <pre></pre>
tags (ou um único <pre />
tag Se o valor for ou for coagido a uma string vazia.
$cgi->param()
, por outro lado, e assumindo um contexto de lista sem argumentos, retornará um Lista do URL-UNESCAPED Nomes de parâmetros CGI, neste caso foo
e bar
.
(Observe que $cgi->pre(...)
faz não Html-escape seu argumento, então $ENV{QUERY_STRING}
Pode apenas comprometer seu CGI com uma pequena injeção de script de sites.)
Outras dicas
o param
O método no objeto CGI retorna uma lista de todos os parâmetros de consulta, incluindo parâmetros GET e POST. A menos que você passe em um argumento, nesse caso, ele procura um parâmetro com esse nome e retorna o valor.
o QUERY_STRING
A variável de ambiente contém a sequência de consulta incomparada.
Isso teria sido bastante óbvio se você tivesse tentado o código em questão.
Aqui é a documentação para param
.
Por fonte de CGI.PM
#### Method: param
# Returns the value(s)of a named parameter.
# If invoked in a list context, returns the
# entire list. Otherwise returns the first
# member of the list.
# If name is not provided, return a list of all
# the known parameters names available.
# If more than one argument is provided, the
# second and subsequent arguments are used to
# set the value of the parameter.
QUERY_STRING
é definido pelo servidor da web, é simplesmente a sequência de consulta do URI: Você pode ler mais sobre isso aqui