我接管了一些perl代码,并被要求在发生的LWP帖子中添加一个keep-alive标头。
谷歌告诉我如何为某些设置执行此操作,但我无法看到如何编写此代码的方式。我能找到的所有信息都是基于创建LWP对象,然后创建POST和参数,然后添加标题,然后实际发布请求,但是在我必须处理的代码中,创建POST,添加标题和发送都在一行中:
my $ua = LWP::UserAgent->new;
my $response = $ua->post( $URL, ['parm1'=>'val1']);
我在这个设置中如何/在哪里添加标题,或者我是否需要根据我找到的示例重新编写?
答案 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请求添加头)。