我使用LWP下载可执行文件类型并在内存中响应,我能够散列文件.但是,如何在我的系统上保存此文件?我想我在下面尝试的是错误的轨道.下载成功,因为我能够正确生成哈希(我通过下载实际文件并比较哈希来仔细检查它).
use strict;
use warnings;
use LWP::Useragent;
use Digest::MD5 qw( md5_hex );
use Digest::MD5::File qw( file_md5_hex );
use File::Fetch;
my $url = 'http://www.karenware.com/progs/pthasher-setup.exe';
my $filename = $url;
$filename =~ m/.*\/(.*)$/;
$filename = $1;
my $dir ='/download/two';
print "$filename\n";
my $ua = LWP::UserAgent->new();
my $response = $ua->get($url);
die $response->status_line if !$response->is_success;
my $file = $response->decoded_content( charset => 'none' );
my $md5_hex = md5_hex($file);
print "$md5_hex\n";
my $save = "Downloaded/$filename";
unless(open SAVE, '>>'.$save) {
die "\nCannot create save file '$save'\n";
}
print …Run Code Online (Sandbox Code Playgroud) 我正在使用perl脚本从我的数据库中提取网址,我使用fetchrow_array从数据库中提取URL工作正常,直到我遇到一个很长的URL,georgelog24.blog.iskreni.net/?bid=6744d9dcf85991ed2e4b8a258153a1ab&lid=ff9963b9a798ea335b75b5f7c0c295d1
然后它开始给我这个错误.
DBD::ODBC::st fetchrow_array failed: st_fetch/SQLFetch (long truncated DBI attribute LongTruncOk not set and/or LongReadLen too small) (SQL-HY000) [state was HY000 now 01004]
[Microsoft][ODBC SQL Server Driver]String data, right truncation (SQL-01004) at C:\test\multihashtest2.pl line 44.
Run Code Online (Sandbox Code Playgroud)
我相信这是在数据库方面,因为我以前用来拉URL的代码已经运行了.我使用的数据库是MSSQL server 2005.
数据库中的URL列当前使用文本类型,但我已尝试将其更改为varchar(max)和nvarchar(max),但错误仍然存在.
经过一些试验和错误,我发现网址的最大长度,然后我可以成功查询fetchrow_array是81个字符.由于URL有时会跨越荒谬的长度,我不能对URL长度施加限制.
任何人都可以帮助我理解并建议解决此问题吗?
仅供参考:第44行是我下面代码中的第一行
while (($myid,$url) = $statement_handle->fetchrow_array()) { # executes as many threads as there are jobs to do
my $thread = threads->create(\&webcrawl); #initiate thread
my $tid = $thread->tid;
print " …Run Code Online (Sandbox Code Playgroud) 我需要使用wget才能像爬虫一样为我的项目开发一个.但是在谷歌搜索中我看到人们建议使用LWP代替Wget.你们能告诉我为什么会这样吗?
我正在运行一个脚本,从数据库中提取URL并执行file :: fetch().根据我的理解,file :: fetch()仅在要下载的URL中存在文件时才有效.
但是,在我的数据库中,偶尔会有一个URL,其中没有要提取的文件.那么,是否有任何模块可用于检查URL中是否有文件我试图执行文件:: fetch()?
我的脚本中有一行
my $uri_handle = File::Fetch->new(uri => $url);
Run Code Online (Sandbox Code Playgroud)
其中$ url可能http://asiaone.com与没有实际获取的文件类似.
我得到这个错误,我拼命想避免,因为有其他URL主要包含要获取的文件.
Use of uninitialized value $path in pattern match (m//) at C:/Perl/lib/File/Spec/Unix.pm line 267.
Use of uninitialized value in string eq at C:/Perl/lib/File/Fetch.pm line 395.
Hostname required when fetching from 'http' at C:\test\multihashtest2.pl line 100 thread 2
Run Code Online (Sandbox Code Playgroud)
如何格式化我的正则表达式来检查文件,还是有一个模块可以用来促进这个?
合法的URL将如下所示
http://the.earth.li/~sgtatham/putty/latest/x86/puttytel.exe
Run Code Online (Sandbox Code Playgroud) 我如何从perl启动firefox?我只需要启动浏览器,以便WWW :: Mechanize :: Firefox可以操作它.在stackoverflow中搜索我已经看到了一些解决方案,比如system('start cmd.exe /k $cmd)在cmd启动时$ cmd是抛出输入的参数.
但是,这些并没有帮助我解决我的问题.
解决方案我试过了
system("start cmd.exe /k start firefox");
system("firefox");
system("cmd","start","firefox");
system("cmd start firefox");
Run Code Online (Sandbox Code Playgroud)
基本上我发现了很多替代品,但我根本无法启动Firefox浏览器.