2010-11-25 189 views
4

我有一个HTTP :: Response来自远程服务器的Perl对象有问题,该对象有时会返回带有重复的'Content-Length'标头的HTTP响应。检测HTTP :: Response中的重复标题

发生这种情况时,如果内容长度值是“43215”,当我读取与标头值:

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

结果是:

4321543215 

如何可以检测是否标题被复制并访问实际值?

回答

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

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

也许你可以尝试通过CONTENT_LENGTH属性来访问内容长度:

$response->content_length 

这也许是意识到重复的标题,但我没有尝试。

+0

谢谢,它像一个魅力 – ajgarlag 2010-11-25 19:50:58

+0

酷,很高兴它的工作:) – 2010-11-25 19:53:55