2014-02-13 20 views
0

我接管了一些Perl代碼,並被要求爲發生的LWP文章添加保持活動標題。將標題添加到Perl中的LWP文章中

谷歌告訴我如何爲特定的設置做到這一點,但我看不出如何做這個代碼的方式。我可以找到的所有信息都是基於創建LWP對象,然後創建POST和參數,然後添加標題,然後實際發佈請求,但是在我必須處理的代碼中,創建POST,添加頁眉和發送都在同一行:

my $ua = LWP::UserAgent->new; 
my $response = $ua->post($URL, ['parm1'=>'val1']); 

如何/我在哪裏可以添加在此設置的頭,或者我需要重新寫按例子,我發現?

+0

我會建議重寫。這樣它會更易於維護,你可以添加任何你想要的控制級別。 – abiessu

+0

如果我可以避免它,我寧願 - 代碼已經穩定了一段時間,並在未來六個月內完全被新系統取代 - 我剛剛被要求添加這個頭來加快速度如果可能的話,不要冒險重寫新的問題! –

回答

2

LWP::UserAgent頁面告訴你如何做到這一點。您可以在用戶代理對象上設置處理程序request_prepare。這會在發佈之前通過請求對象。

其實,任何事情你把作爲鍵值對的關鍵'Content'其次要張貼結構之前列表,會轉化爲標題,每HTTP::Request::Common::POST

$ua->post($URL, keep_alive => 1, Content => ['parm1'=>'val1']); 

或沒有內容標籤如果你先放結構,你可以把標題鍵值對後:

$ua->post($URL, ['parm1'=>'val1'], keep_alive => 1); 
+0

這是錯誤的。添加keep_alive => 1只會產生一個「Keep-Alive:1」標題,它與持久連接無關,它應該在「Connection:keep-alive」中執行。只需創建一個tcpdump,就可以看到每個HTTP請求都會建立自己的TCP連接,這與保持活着的應用程序相反。 –

1

他們真的要求你只添加一個保活頭,還是他們要求你供養永葆,如同一個TCP連接中的多個HTTP請求。在後一種情況下,你應該使用(根據LWP的文件::用戶代理):

my $ua = LWP::UserAgent->new(keep_alive => 10); 
$ua->get('http://foo.bar/page1'); 
$ua->get('http://foo.bar/page2'); # reuses connection from previous request 

在這種情況下,將最多保留10個連接在同一時間打開。如果您只請求了同一個站點,那麼您也可以將其設置爲1,以便它爲所有請求重新使用相同的TCP連接。

Keep-Alive標題沒有意義,用戶代理中keep_alive => 1的內容是設置連接緩存並添加「Connection:keep-alive」標頭(HTTP/1.1保持活動的含義,所以它不需要爲HTTP/1.1請求添加頭部)。

+0

他們問我添加保持活動標題。我不知道他們是否意味着支持保持活力,但在遵循@Axeman的建議之後,它似乎更快。我會問他們是否確實是這個意思:) –

+0

不,@Axeman錯了。只要做一個tcpdump,你就會發現它不會重複使用TCP連接來處理多個請求。 –

+0

好的,@Axeman並沒有錯。他的代碼添加了一個Keep-Alive標題,這是你所要求的,但這可能不是他們給你的任務(例如,重新使用保持連接的連接)。它所做的只是添加一個沒人使用的標題。 –