perl - ¿Cómo puedo obtener todo el cuerpo de la solicitud con CGI.pm?
(2)
Estoy intentando escribir un script Perl CGI para manejar las solicitudes de XML-RPC, en el que se envía un documento XML como el cuerpo de una solicitud HTTP POST.
El módulo CGI.pm hace un gran trabajo en la extracción de parámetros con nombre de una solicitud HTTP, pero no puedo averiguar cómo hacer que me proporcione el cuerpo completo de la solicitud HTTP (es decir, el documento XML en la solicitud XML-RPC). manejo).
Si no es CGI.pm, ¿hay otro módulo que pueda analizar esta información fuera de la solicitud? Preferiría no tener que extraer esta información "a mano" de las variables de entorno. Gracias por cualquier ayuda.
Correcto, uno podría usar POSTDATA, pero eso solo funciona si la solicitud Tipo de contenido no se ha configurado como ''multipart / form-data''.
Si se establece en ''multipart / form-data'', CGI.pm realiza su propio procesamiento de contenido y POSTDATA no se inicializa.
Entonces, otras opciones incluyen $cgi->query_string
y / o $cgi->Dump
.
$cgi->query_string
devuelve el contenido de la POST en un formato GET ( param=value&...
), y no parece haber una manera de obtener simplemente los contenidos de la POST STDIN tal como fueron transmitidos por el cliente.
Entonces, para obtener el contenido real de la entrada estándar de una solicitud POST, si modificar CGI.pm es una opción para usted, puede modificar la línea 620 para guardar el contenido de @lines
en algún lugar de una variable, como por ejemplo:
$self->{standard_input} = join '''', @lines;
Y luego acceda a través de $cgi->{standard_input}
.
Puede obtener los datos POST sin procesar utilizando el nombre de parámetro especial POSTDATA.
my $q = CGI->new;
my $xml = $q->param( ''POSTDATA'' );
Alternativamente, puedes leer STDIN directamente en lugar de usar CGI.pm, pero luego pierdes todas las otras cosas útiles que CGI.pm hace.
El truco POSTDATA está documentado en los excelentes documentos CGI.pm here .