小编Mar*_*Lim的帖子

perl保存lwp下载的文件

我使用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 download save lwp

9
推荐指数
2
解决办法
2万
查看次数

数据库fetchrow_array失败了长截断的DBI属性

我正在使用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)

perl dbi

7
推荐指数
2
解决办法
1万
查看次数

wget与Perl的lwp有何不同?

我需要使用wget才能像爬虫一样为我的项目开发一个.但是在谷歌搜索中我看到人们建议使用LWP代替Wget.你们能告诉我为什么会这样吗?

perl wget lwp

7
推荐指数
1
解决办法
635
查看次数

Perl File :: Fetch失败,因为URL没有文件部分

我正在运行一个脚本,从数据库中提取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 download

5
推荐指数
1
解决办法
626
查看次数

如何从perl启动程序?

我如何从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浏览器.

windows perl firefox

5
推荐指数
1
解决办法
4229
查看次数

标签 统计

perl ×5

download ×2

lwp ×2

dbi ×1

firefox ×1

save ×1

wget ×1

windows ×1