Обнаружить дублированный заголовок в HTTP :: Response - PullRequest
4 голосов
/ 25 ноября 2010

У меня проблема с HTTP :: Response объектом Perl с удаленного сервера, который иногда возвращает HTTP-ответ с дублированными заголовками Content-Length.

Когда это происходит, если значение длины содержимого равно '43215', когда я читаю значение заголовка с помощью:

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

результат:

4321543215

Как я могу определить, дублируется ли заголовок, и получить доступ к реальному значению?

Ответы [ 2 ]

11 голосов
/ 26 ноября 2010

Из подробного руководства для HTTP::Headers:

Многозначное поле будет возвращено как отдельные значения в контексте списка и будет объединено с "," в качестве разделителя в скалярном контексте.

и это контекст списка:

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

Таким образом, $response->header() возвращает оба Content-length заголовка в виде списка, и результат, по сути:

print join('', 43215, 43215)

Вы можете либо использовать подход $response->content_length() Корка, либо захватить все заголовки Content-length в массиве и использовать первый в качестве длины:

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

Если вы получите несколько Content-length Заголовки и они разные, тогда кто-то очень смущен.

1 голос
/ 25 ноября 2010

Вы не можете обнаружить это, по крайней мере, не надежно. Конечно, вы могли бы разделить значение заголовка по середине и попытаться выяснить, равно ли левое значение правому, но когда вы получили размеры, такие как 4444, вы не знаете, дублируется или нет. Единственный шанс исправить это - исправить это на вышестоящем сервере, который отправляет вам дублированные заголовки.

Возможно, вы можете попытаться получить доступ к длине контента через свойство content_length:

$response->content_length

Возможно, это известно о дублирующих заголовках, но я не пробовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...