You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl代码报错Too many header lines,疑Cookie格式问题求排查

解决LWP请求中"Too many header lines (limit is 128)"的问题

问题根源

你猜的没错——这个错误确实是Cookie的传递格式不对导致的。

在你的原代码里,你把一长串用分号分隔的Cookie直接传给了get方法的Cookie参数,但LWP::UserAgent对这种写法的处理逻辑有问题:它会把每个分号分隔的键值对当成单独的HTTP请求头行来发送。你数一下你的Cookie有多少个键值对?十几二十个肯定有,再加上其他默认的请求头,很容易就超过Net::HTTP默认的128行限制,于是就触发了这个报错。

两种修复方案

方案1:用Cookie Jar管理(推荐)

LWP自带了HTTP::Cookies模块,专门用来管理Cookie,能自动处理格式问题,还能帮你维护Cookie的有效期、域名等属性,比手动拼接靠谱多了:

use HTTP::Request::Common qw(POST); 
use strict; 
use warnings; 
use LWP;
use HTTP::Cookies;

# 创建一个Cookie Jar对象
my $cookie_jar = HTTP::Cookies->new();

# 逐个添加Cookie键值对,参数依次是:版本、键、值、路径、域名等
$cookie_jar->set_cookie(0, 'incomerr_refid', '0', '/', '60606.com', undef, 0, 0, 86400, 0);
$cookie_jar->set_cookie(0, 'ff_language_id', '3', '/', '60606.com', undef, 0, 0, 86400, 0);
$cookie_jar->set_cookie(0, '_t_', '1', '/', '60606.com', undef, 0, 0, 86400, 0);
$cookie_jar->set_cookie(0, 'fcode2', '4139', '/', '60606.com', undef, 0, 0, 86400, 0);
# 把剩下的Cookie都按这个格式加进去...
$cookie_jar->set_cookie(0, 'ping_last', '1527663675.939', '/', '60606.com', undef, 0, 0, 86400, 0);

# 初始化UserAgent时绑定Cookie Jar
my $ua = LWP::UserAgent->new(
    agent => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.5) Gecko/20060719 Firefox/1.5.0.5',
    cookie_jar => $cookie_jar
);

my $res = $ua->get('http://60606.com/members/search');
print $res->content;

方案2:手动构造HTTP请求头

如果你不想用Cookie Jar,也可以直接构造HTTP::Request对象,把整个Cookie字符串作为单个请求头传递,这样LWP就不会拆分它了:

use HTTP::Request::Common qw(POST); 
use strict; 
use warnings; 
use LWP;

my $ua = LWP::UserAgent->new(
    agent => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.5) Gecko/20060719 Firefox/1.5.0.5'
);

# 直接创建GET请求,手动设置Cookie头
my $req = HTTP::Request->new(GET => 'http://60606.com/members/search');
$req->header(
    'Cookie' => 'incomerr_refid=0; ff_language_id=3; _t_=1; fcode2=4139; ss_time=1527663671; PHPSESSID=otfmog35f0iva0uld1rgld2kj7; _webpush_key_=none; dinged_id=1412807; _language_id=3; _gnum_=950212; refid=1; first_key=TOCz19ls8HfkFW6LoBrIj35p4xSyYPVE; last_valid_url=https%3A//60606.com/login; ping_last=1527663675.939'
);

my $res = $ua->request($req);
print $res->content;

总结一下

原代码的问题在于:当你在$ua->get()的参数列表里写Cookie => 'xxx; yyy'时,LWP会错误地把这个字符串按分号拆分成多个请求头,导致行数超限。用Cookie Jar或者手动构造请求头的方式,就能让Cookie作为单个合法的HTTP头被发送,解决这个问题。

内容的提问来源于stack exchange,提问作者elizabeth williams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:12:16