2011-11-23 9 views
8

Czy możliwe jest zapewnienie odpowiedzi wieloczęściowej HTTP (przy użyciu języka Perl/PHP), podobnie jak żądanie wieloczęściowe? Scenariusz wygląda tak: chciałbym podać URL, który pobiera parametr dla EmployeeID, aw odpowiedzi odpowiedź powinna składać się ze zdjęcia pracownika, najnowszego odcinka wypłaty oraz informacji takich jak nazwisko, wiek i adres. Odbiorca nie jest przeglądarką, ale będzie to program, który otrzyma tę odpowiedź i przetworzy je później. Masz pomysł, jak to zrobić?Odpowiedź wieloczęściowa HTTP przy użyciu języka Perl lub PHP

Aby podać więcej informacji na temat powyższego pytania, muszę podać adres URL znajomemu, który programowo otrzyma odpowiedź. Dla np. (w języku Perl):

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

Moja aplikacja ma odpowiadać nie tylko danymi, ale także plikami! Poproszono mnie, abym zwrócił odpowiedź wieloczęściową.

Nie wiedziałem, jak zacząć od samego kodowania. Wyszukiwarka google "odpowiedź wieloczęściowa" nie zwróciła stron, z których mogę się nauczyć i zacząć. Jednak komentarz autorstwa chansen był bardzo pomocny, podobnie jak jego przykładowy kod https://gist.github.com/1391017. Wielkie dzięki.

+2

@ Srikanth-Vittal to https://gist.github.com/1391017 powinno Ci zacząć. – chansen

+0

@chansen Dzięki za link. To dokładnie to, czego szukałem. Zaktualizowałem również moje pytanie, podając więcej szczegółów. –

+2

Moderator ponownie otworzył to pytanie i usunął kilka komentarzy do tych komentarzy, usuwając istniejące komentarze z kontekstu. Żałuję, że nie było opcji wyświetlającej całą historię, włącznie z niekompetencją moderatorów. – chansen

Odpowiedz

8

Przedstawiam swój oryginalny https://gist.github.com/1391017 jako odpowiedź.

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

wyjściowa:

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

dzięki. to działało dobrze dla mnie. –

Powiązane problemy