perl | GET vs POST en CGI

En Perl , Common Gateway Interface (CGI) no es más que un protocolo que define la interacción de los servidores web con algunos programas ejecutables para producir páginas web dinámicas. Básicamente, muestra cómo el servidor web envía información al programa y el programa envía la información de vuelta al servidor web, que a su vez puede enviarse de vuelta al navegador.
GETy POSTno son intercambiables y ambos tipos son diferentes. Los servidores proxy pueden almacenar en caché el resultado de GETlas requests.GETEl método es el método predeterminado para todas las requests web para pasar la información del navegador al servidor web y también crea una string larga que aparece en el cuadro de URL del navegador. Envía la información de usuario encriptada adjunta a la solicitud de página. La página y la información encriptada están separadas por ? carácter:
Ejemplo:

http://servername.com/cgi-bin/script_name.cgi o.pl?key1=value1&key2=value2…….

Esta información se pasa a través QUERY_STRINGdel encabezado y mediante el uso QUERY_STRINGde la variable de entorno se puede acceder fácilmente a ella en su programa CGI. Solo pueden haber 1024 caracteres en una string de solicitud ya que el GETmétodo tiene una limitación de tamaño. La información se puede pasar simplemente concatenando pares clave-valor junto con cualquier URL.

NOTA: Si está tratando con contraseñas o cualquier otra información confidencial para pasarla al servidor, entonces usar el GETmétodo no es una buena opción.

Ejemplo:

<html>
<head></head>
<body>
<b> Search Your Query:</b><br>
<FORM action="Gfg_get.pl" method = "GET">
<input type="text" name="q" size="20" maxlength="120">
<input type="submit" value="Search"><br>
<input type="radio" name="l" value="Web" checked>Web
<input type="radio" name="l" value="India">IND
</FORM>
</body>
</html>

Producción:

Script Perl-CGI para el formulario del método GET anterior:

#!"c:\xampp\perl\bin\perl.exe"
    
$buffer = $ENV{'QUERY_STRING'};
#split information into key/value pairs
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) 
{
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9] [a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ s/~!/ ~!/g;
    $FORM{$name} = $value;
}
  
$SearchTerm = $FORM{'q'};
$Location = $FORM{'l'};
  
print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>GeeksForGeeks - Get Method</title>";
print "</head>";
print "<body>";
print "<h3>Hello You searched '$Location' for '$SearchTerm'<br>
Few Matches Found!<br>
<br>
Match 1<br>
Match 2<br>
Match 3<br>
Match 4<br>
etc.....</h3>";
print "</body>";
print "</html>";
  
1;

Salida:

como se muestra arriba, en la imagen de salida, la información se transmite junto con la URL:

http://localhost/xampp/cgi-bin/Gfg_get.pl?q=music&l=Web

Por el contrario, el POSTmétodo es el método más fiable para pasar información a un programa CGI. Generalmente, el POSTmétodo se utiliza cuando se requiere cargar la información en el servidor. Con el objetivo de cargar una mayor cantidad de datos, POSTel método se considera más adecuado en lugar del GETmétodo, ya que ninguno de los datos aparece en el cuadro de URL. De manera similar al GETmétodo, la información también se empaqueta en esto, pero en lugar de enviarla como una string de texto después de ? en el cuadro URL, lo envía como un mensaje separado al servidor a través de una ruta diferente a la que puede acceder su programa Perl/CGI.

Ejemplo:

<head></head>
<body>
<b>Please Fill in the Information:</b><br>
<form action="GfG_post.pl" method="post">
First Name:<br>
<input type="text" name="first_name" size="25" maxlength="100"><br>
  
Last Name:<br>
<input type="text" name="last_name" size="25" maxlength="100"><br>
<br>
Languages:<br>
<input type="checkbox" name="python" value="yes">Python
<input type="checkbox" name="java" value="yes">Java
<input type="checkbox" name="kotlin" value="yes">Kotlin
<input type="checkbox" name="perl" value="yes">Perl
<input type="checkbox" name="swift" value="yes">Swift
<br>
Payment: <select name=payment>
<option>---Select---</option>
<Option value="Paypal"> Paypal </option>
<Option value="Internet Banking"> Internet Banking </option>
<Option value="Credit Card"> Credict Card </option>
<Option value="Paytm"> Paytm </option>
</select><br>
<br>
First Time Customer?<br>
<input type="radio" name="first_time" value="Yes">Yes
<input type="radio" name="first_time" value="No">No<br>
<br>
Feedback:<br>
<textarea wrap= "virtual" name="feedback" cols="25" rows="3"></textarea><br>
<br>
<input type="submit" value="Place Order">
</form>
</body>
</html>

Producción:

Script Perl-CGI para el método POST anterior:

#!"c:\xampp\perl\bin\perl.exe"
   
read (STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) 
{
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9] [a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ s/~!/ ~!/g;
    $FORM{$name} = $value;
}
   
if($FORM{python}) 
{
   $python_flag ="YES";
} 
else 
{
   $python_flag ="NO";
}
   
if($FORM{java}) 
{
   $java_flag ="YES";
}
else 
{
   $java_flag ="NO";
}
   
if($FORM{kotlin})
{
   $kotlin_flag ="YES";
} 
else
{
   $kotlin_flag ="NO";
}
   
if($FORM{perl}) 
{
   $perl_flag ="YES";
} 
else 
{
   $perl_flag ="NO";
}
   
if($FORM{swift}) 
{
   $swift_flag ="YES";
} 
else
{
   $swift_flag ="NO";
}
   
$first_name= $FORM{'first_name'};
$last_name= $FORM{'last_name'};
$payment_method= $FORM{'payment'};
$first_time= $FORM{'first_time'};
$feed_back= $FORM{'feedback'};
   
print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>GeeksForGeeks - Post Method</title>";
print "</head>";
print "<body>";
print "<h3>Hello $first_name $last_name</h3>";
print "<h3>Here is your Purchased Order!</h3>";
print "<h3>Python: $python_flag</h3>";
print "<h3>Java: $java_flag</h3>";
print "<h3>Kotlin: $kotlin_flag</h3>";
print "<h3>Perl: $perl_flag</h3>";
print "<h3>Swift: $swift_flag</h3>";
print "<h3>Payment Method: $payment_method</h3>";
print "<h3>First Time Customer: $first_time</h3>";
print "<h3>Feedback: $feed_back</h3>";
print "</body>";
print "</html>";
   
1;

Producción:

Como se puede ver en la imagen de arriba, después de usar POSTel método, la información se carga en el servidor sin aparecer en el cuadro de URL. Esto hace que los datos enviados a través de Internet sean más seguros en comparación con el GETmétodo.

Publicación traducida automáticamente

Artículo escrito por akshatyadav y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *