2010-11-25 11 views
4

Ich habe ein Problem mit einem HTTP :: Antwort Perl-Objekt von einem Remote-Server, der manchmal die HTTP-Antwort mit doppelten 'Content-Length' Header zurückgibt.Ermitteln Sie doppelte Header in HTTP :: Antwort

Wenn dies der Fall ist, wenn der Content-Length-Wert '43215' ist, wenn ich den Header-Wert mit lesen:

print ($response->header('Content-length')); 

das Ergebnis ist:

4321543215 

Wie kann ich erkennen, ob der Header ist dupliziert und Zugriff auf den realen Wert?

Antwort

11

Vom feinen Handbuch für HTTP::Headers:

Mehrwert-Feld als separate Werte in Listenkontext zurückgegeben werden und wird mit verketteten „“ als Trennzeichen im skalaren Kontext.

und dies ist Listenkontext:

print ($response->header('Content-length')) 

So $response->header() kehrt beiden Content-length Header als Liste und das Ergebnis ist im Wesentlichen:

print join('', 43215, 43215) 

können Sie entweder kork der $response->content_length() nähern oder greifen Sie alle Content-length Header in einem Array und verwenden Sie die erste als die Länge:

my @lengths = $response->header('Content-length'); 
my $length = $lengths[0]; 

Wenn Sie am Ende mehrere Content-length Header bekommen und sie sind anders, dann ist jemand sehr verwirrt.

+1

"jemand ist sehr verwirrt" - Bitte nicht anthropomorphisieren die Webserver. Sie hassen es, wenn Sie das tun! – DVK

1

Sie können dies nicht erkennen, zumindest nicht zuverlässig. Sie könnten natürlich den Header-Wert in der Mitte aufteilen und versuchen herauszufinden, ob der linke Wert gleich dem rechten ist, aber wenn Sie Größen wie 4444 haben, wissen Sie nicht, ob es doppelt ist oder nicht. Die einzige Möglichkeit, dies zu beheben, besteht darin, das Problem im Upstream-Server zu beheben, der doppelte Header sendet.

Man könnte vielleicht versuchen, den Inhalt Länge über die content_length Eigenschaft zuzugreifen:

$response->content_length 

Vielleicht bewusst doppelte Header ist, aber ich habe nicht versucht es.

+0

Danke, es funktioniert wie ein Charme – ajgarlag

+0

Cool, froh, dass es funktioniert :) –

Verwandte Themen