2011-11-23 15 views
8

Çokluortam talebi gibi HTTP çok parçalı yanıtı (Perl/PHP kullanarak) sağlamak mümkün mü? Senaryo gibidir, bir URL'nin, çalışanın EmployeeID için bir parametre almasını istiyorum ve karşılık olarak, çalışanın fotoğrafı, en son maaş bordrosu ve isim, yaş ve adres gibi bilgilerden oluşmalıdır. Alıcı uç bir tarayıcı değildir, ancak bu yanıtı alan ve daha sonra işleyen bir program olacaktır. Bunu nasıl yapacağın hakkında bir fikrin var mı?Perl veya PHP kullanarak HTTP çok parçalı yanıtı

Yukarıdaki soru hakkında daha fazla bilgi vermek için, programa yanıtı alacak olan arkadaşıma bir URL vermeliyim. Örneğin (Perl'de):

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

Uygulamamın yalnızca veri değil, dosyalarla da yanıt vermesi bekleniyor! Çok parçalı yanıtı döndürmesini istedim.

Artık kodlamanın kendisiyle nasıl başlamamıştım. "Çok parçalı yanıt" konusundaki google araması, öğrenebileceğim ve başlayabileceğim sayfaları döndürmedi. Ancak, chansen tarafından yapılan yorum, kod örneğinin yanı sıra https://gist.github.com/1391017 kod örneğine de yardımcı oldu. Çok teşekkürler.

+2

Srikanth-Vittal @ bu https://gist.github.com/1391017 başlamak gerekir. – chansen

+0

@chansen Bağlantı için teşekkürler. Tam olarak aradığım şey buydu. Ayrıca sorumu daha fazla ayrıntıyla güncelledim. –

+2

Bir moderatör bu soruyu yeniden açtı ve varolan yorumları bağlam dışı hale getiren bu yoruma birkaç yorum kaldırıldı, moderatörlerdeki yetersizlik dahil olmak üzere tüm geçmişi görüntüleyen bir seçenek olmasını diliyorum. – chansen

cevap

8

Orijinal https://gist.github.com/1391017 yanıtımı yanıt olarak yaşıyorum.

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

Çıktı:

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

teşekkürler. benim için iyi çalıştı. –

İlgili konular