我有一个Perl脚本需要从外部URL检索图像并将其保存在本地。在某些情况下,URL是PNG文件的直接URL,我的代码可以完美地捕获图像数据并将其保存在本地。
我的Perl代码如下所示:
$ua = LWP::UserAgent->new();
$ua->agent("MyAgent");
$response = $ua->get($iconpath);
$content = $response->decoded_content(charset => 'none');
open(ICONFILE, ">$localimagefile");
binmode(ICONFILE);
print ICONFILE $content;
close(ICONFILE);
但在某些情况下,外部网站(iconpath)上的图片的URL是一个PHP脚本,如下所示:
http://forecast.weather.gov/DualImage.php?i=sct&j=hi_tsra&jp=30
在这种情况下,会创建本地图像文件,但它是零字节。当我尝试在请求之后转储$ content时,它是空的并且它的长度为零。对于PNG文件的直接URL,此相同的代码可以正常工作,并在服务器上保存图像文件的有效副本。
我尝试过使用wget,curl,反引号和LWP的各种方法:Simple(getstore),但我总是使用PHP URL在外部生成相同的空文件结果。
任何想法如何做到这一点将不胜感激。
答案 0 :(得分:0)
问题是从天气API返回的实际数据有"&"由HTML实体代码替换的字符&放大器(忽略空格 - 添加所以它显示在这里)。当我将返回的URL转储到浏览器时,我没有注意到这一点,因为它只是显示为常规&符号(&)。简单的解决方案是在调用 - >获取该URL之前用实际的&符号替换HTML实体,该URL完美地工作并返回图像数据或在使用":content_file =>时直接保存它$文件名"在 - >接听电话。