2011-11-23 13 views
8

È possibile fornire risposta multipartitica HTTP (utilizzando Perl/PHP) proprio come la richiesta multipart? Lo scenario è come, mi piacerebbe fornire un URL che prende un parametro per EmployeeID, e in cambio la risposta dovrebbe consistere in foto del dipendente, busta paga più recente e informazioni come nome, età e indirizzo. Il destinatario non è un browser, ma sarà un programma che riceve questa risposta e la processa in un secondo momento. Qualche idea su come fare questo?Risposta multiparto HTTP utilizzando Perl o PHP

Per fornire ulteriori informazioni sulla mia domanda precedente, devo fornire un URL al mio amico che riceverà la risposta a livello di codice. Ad es. (In Perl):

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

si suppone La mia applicazione di rispondere con non solo i dati, ma anche con i file! Mi è stato chiesto di farlo per restituire la risposta multipart.

Non ho ora come iniziare con la codifica stessa. La ricerca su google "risposta multipart" non ha restituito pagine con le quali posso imparare e iniziare. Tuttavia, il commento di chansen è stato molto utile, così come il suo codice di esempio https://gist.github.com/1391017. Molte grazie.

+2

@ srikanth-Vittal questo https://gist.github.com/1391017 dovrebbe iniziare. – chansen

+0

@chansen Grazie per il link. Questo è esattamente quello che stavo cercando. Ho anche aggiornato la mia domanda con maggiori dettagli. –

+2

Un moderatore ha riaperto questa domanda e rimosso diversi commenti a questi commenti rendendo i commenti esistenti fuori dal contesto, vorrei che ci fosse un'opzione che mostrava la cronologia completa, compresa l'incompetenza dei moderatori. – chansen

risposta

8

Sto proponendo il mio originale https://gist.github.com/1391017 come risposta.

#!/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; 

uscita:

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

grazie. Ha funzionato bene nel mio caso. –