2010-11-25 179 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