检测HTTP :: Response中的重复标头

时间:2010-11-25 19:01:38

标签: perl http-headers

我遇到来自远程服务器的 HTTP :: Response Perl对象的问题,该对象有时会返回带有重复“Content-Length”标头的HTTP响应。

发生这种情况时,如果内容长度值为'43215',那么当我用以下内容读取标题值时:

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

结果是:

4321543215

如何检测标头是否重复并访问实际值?

2 个答案:

答案 0 :(得分:11)

来自HTTP::Headers的精细手册:

  

多值字段将作为列表上下文中的单独值返回,并且将是   与“,”连接,作为标量上下文中的分隔符。

这是列表上下文:

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

因此,$response->header()将两个Content-length标头作为列表返回,结果基本上是:

print join('', 43215, 43215)

您可以使用kork的$response->content_length()方法或获取数组中的所有Content-length标题,并使用第一个作为长度:

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

如果您最终得到多个Content-length标题但它们不同,那么有人会非常困惑。

答案 1 :(得分:1)

你无法检测到这一点,至少不可靠。你当然可以在中间分割标题值并尝试找出左边的值是否等于右边但是当你得到像4444这样的尺寸时,你不知道它是否重复。解决此问题的唯一机会是将其修复到向您发送重复标头的上游服务器中。

您可以尝试通过content_length属性访问内容长度:

$response->content_length

也许这知道重复的标题,但我没有尝试过。