将标头添加到Perl中的LWP帖子

时间:2014-02-13 15:28:17

标签: perl header lwp

我接管了一些perl代码,并被要求在发生的LWP帖子中添加一个keep-alive标头。

谷歌告诉我如何为某些设置执行此操作,但我无法看到如何编写此代码的方式。我能找到的所有信息都是基于创建LWP对象,然后创建POST和参数,然后添加标题,然后实际发布请求,但是在我必须处理的代码中,创建POST,添加标题和发送都在一行中:

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

我在这个设置中如何/在哪里添加标题,或者我是否需要根据我找到的示例重新编写?

2 个答案:

答案 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 );

答案 1 :(得分:1)

他们真的要求你只添加一个保活标题,还是他们要求你支持保持活着,例如同一TCP连接中的多个HTTP请求。在后一种情况下,您应该使用(根据LWP :: UserAgent的文档):

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 keep-alive是隐含的,因此不需要为HTTP / 1.1请求添加头)。