2011-11-23 13 views
8

¿Es posible proporcionar respuesta multiparte HTTP (usando Perl/PHP) tal como solicitud multiparte? El escenario es como, me gustaría proporcionar una URL que toma un parámetro para EmployeeID, y a cambio la respuesta debe consistir en la foto del empleado, la última nómina e información como el nombre, la edad y la dirección. El extremo receptor no es un navegador, pero será un programa que obtenga esta respuesta y la procese más adelante. ¿Alguna idea de como hacerlo?Respuesta multiparte HTTP usando Perl o PHP

Para dar más información sobre mi pregunta anterior, tengo que proporcionar una URL a mi amigo que recibirá la respuesta programáticamente. Por ej. (en Perl):

$response = $ua->request($my_url) 

¡Se supone que mi aplicación responde no solo con datos, sino también con archivos! Me estaban pidiendo que lo hiciera para devolver respuestas en varias partes.

No sabía cómo comenzar con la codificación. La búsqueda de Google en "respuesta de varias partes" no me devolvió páginas con las que puedo aprender y comenzar. Sin embargo, el comentario de Chansen fue realmente útil, así como su muestra de código https://gist.github.com/1391017. Muchas gracias.

+2

@ srikanth-Vittal este https://gist.github.com/1391017 debe empezar. – chansen

+0

@chansen Gracias por el enlace. Eso es exactamente lo que estaba buscando. También actualicé mi pregunta con más detalles. –

+2

Un moderador volvió a abrir esta pregunta y eliminó varios comentarios de este comentario haciendo que los comentarios existentes no estén en contexto, ojalá hubiera una opción que mostrara el historial completo, incluida la incompetencia de los moderadores. – chansen

Respuesta

8

Estoy presentando mi original https://gist.github.com/1391017 como respuesta.

#!/usr/bin/perl 
use strict; 
use warnings; 

use HTTP::Response; 

my $response = HTTP::Response->new(
    200, 'OK', [ 'Content-Type' => 'multipart/form-data' ] 
); 

$response->protocol('HTTP/1.1'); 
$response->date(time); 
$response->server('Foo/1.0'); 

my $name = HTTP::Message->new([ 
    'Content-Type'  => 'text/plain; charset=UTF-8', 
    'Content-Disposition' => 'form-data; name="name"', 
], 'John Doe'); 

$response->add_part($name); 

my $note = HTTP::Message->new([ 
    'Content-Type'  => 'text/plain; charset=UTF-8', 
    'Content-Disposition' => 'form-data; name="note"', 
], <<'NOTE'); 
Resources: 
    o http://search.cpan.org/dist/HTTP-Message/lib/HTTP/Message.pm 
    o http://search.cpan.org/dist/HTTP-Message/lib/HTTP/Response.pm 
    o http://tools.ietf.org/html/rfc2388 
    o http://tools.ietf.org/html/rfc2616 
NOTE 

$response->add_part($note); 

my $blob = HTTP::Message->new([ 
    'Content-Type'  => 'application/octet-stream', 
    'Content-Disposition' => 'form-data; name="blob"; filename="blob.bin"', 
]); 
$blob->add_content('a chunk'); 
$blob->add_content(' of data'); 

$response->add_part($blob); 

print $response->as_string; 

Salida:

HTTP/1.1 200 OK 
Date: Thu, 24 Nov 2011 10:03:25 GMT 
Server: Foo/1.0 
Content-Type: multipart/form-data; boundary=xYzZY 

--xYzZY 
Content-Type: text/plain; charset=UTF-8 
Content-Disposition: form-data; name="name" 

John Doe 
--xYzZY 
Content-Type: text/plain; charset=UTF-8 
Content-Disposition: form-data; name="note" 

Resources: 
    o http://search.cpan.org/dist/HTTP-Message/lib/HTTP/Message.pm 
    o http://search.cpan.org/dist/HTTP-Message/lib/HTTP/Response.pm 
    o http://tools.ietf.org/html/rfc2388 
    o http://tools.ietf.org/html/rfc2616 

--xYzZY 
Content-Type: application/octet-stream 
Content-Disposition: form-data; name="blob"; filename="blob.bin" 

a chunk of data 
--xYzZY-- 
+0

gracias. funciono bien para mi. –

Cuestiones relacionadas