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

ajg*_*lag 4 perl http-headers

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

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

print ($response->header('Content-length'));
Run Code Online (Sandbox Code Playgroud)

结果是:

4321543215
Run Code Online (Sandbox Code Playgroud)

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

mu *_*ort 11

从精细手册HTTP::Headers:

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

这是列表上下文:

print ($response->header('Content-length'))
Run Code Online (Sandbox Code Playgroud)

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

print join('', 43215, 43215)
Run Code Online (Sandbox Code Playgroud)

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

my @lengths = $response->header('Content-length');
my $length  = $lengths[0];
Run Code Online (Sandbox Code Playgroud)

如果你最终得到多个Content-length标题并且它们不同,那么有人会非常困惑.