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

使用Perl getstore下载图片返回500错误,wget及浏览器可正常下载

解决Perl getstore返回500错误但wget/浏览器可正常下载的问题

这种情况我遇到过不少,核心原因几乎都是请求头的差异——LWP::Simple的getstore方法默认使用的请求头(尤其是User-Agent)被目标服务器识别为非浏览器/非合法请求,从而返回500内部错误,而wget和浏览器会发送更符合服务器预期的请求头,所以能成功下载。

解决方案1:修改LWP::Simple的全局User-Agent

如果你必须坚持用getstore方法,可以直接修改LWP::Simple底层使用的User-Agent对象,模拟浏览器的请求标识:

use LWP::Simple;
use LWP::UserAgent;

# 设置一个常见的浏览器User-Agent,替换成你常用的浏览器标识也可以
$LWP::Simple::ua->agent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36');

my $url = "http://shop.xeptor.co.uk/imgs/cef4cbbe-d86e-420e-aec6-4371d7e9b2bc/250/250/2262497R4xtrep.jpg";
my $filename = "test.jpg";
my $rc = getstore($url, $filename);

if (is_error($rc)) { die "getstore of <$url> failed with $rc"; }

解决方案2:改用LWP::UserAgent实现getstore功能(更灵活)

其实LWP::Simple的getstore本质是对LWP::UserAgent的简化封装,直接使用LWP::UserAgent可以更灵活地控制请求头,同时实现相同的文件存储功能:

use LWP::UserAgent;

my $url = "http://shop.xeptor.co.uk/imgs/cef4cbbe-d86e-420e-aec6-4371d7e9b2bc/250/250/2262497R4xtrep.jpg";
my $filename = "test.jpg";

# 创建UserAgent实例,设置浏览器风格的User-Agent
my $ua = LWP::UserAgent->new(
    agent => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    # 可选:添加其他请求头,比如Accept、Referer等,根据服务器要求调整
    default_headers => HTTP::Headers->new(
        Accept => 'image/jpeg,image/png,*/*',
    ),
);

# 执行请求并将内容写入文件
my $response = $ua->get($url, ':content_file' => $filename);

if ($response->is_error) {
    die "getstore of <$url> failed with " . $response->status_line;
}

为什么这能解决问题?

很多服务器会通过User-Agent字段过滤请求,拒绝那些看起来像爬虫/脚本的默认标识(LWP::Simple的默认User-Agent是类似libwww-perl/6.67这样的字符串)。模拟浏览器的User-Agent可以让服务器认为这是正常的用户请求,从而返回正确的响应。

如果修改后还是不行,可以进一步对比wget和浏览器的请求头(比如用浏览器的开发者工具查看Network请求,或者用wget -d查看详细请求),把缺失的请求头也添加到Perl代码中,通常就能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:44:18