使用Perl来FTP HTTP代理后面的文件

时间:2012-07-18 09:52:29

标签: perl proxy ftp net-ftp

我编写了一个简单的Perl脚本列表,获取mtime然后获取文件(基于mtime)。这是使用RHEL5 / 6中提供的Perl Net :: FTP模块完成的。

我的问题是我现在必须调整此脚本来传输HTTP squid代理(而不是FTP代理)后面的文件。

如果我在为这些程序设置相关的代理配置文件后使用wget或lftp等Linux shell命令,我可以ftp文件。

有没有办法在Perl中执行此操作而不调用system(shell)命令。我试过设置Net :: FTP防火墙选项(见下文),但我相信这只适用于我们没有或没有使用的FTP代理。

到目前为止,我的代码与此类似(为清晰起见,我省略了错误处理):

my $host = '111.111.111.111';
my $ftp_port = 21;
my $passive = 0; #Have also tried with passive mode on.
my $firewall = 'proxy.xx:3128';
my $debug = 1;
my $username = 'foo';
my $password = 'bah';

my $ftp = Net::FTP->new($host, Port=> $ftp_port, Passive => $passive, Firewall => $firewall, Debug => $debug);
$ftp->login($username, $password);
my @file_list = $ftp->ls;
foreach my $file (@file_list) {
    my $mod_time = $ftp->mdtm($file);
    if($mod_time + $wait_time <= time() ) {
        $ftp->get($file);
    }
}
$ftp->quit;

编辑:我收到的错误如下:

Net::FTP: new(111.111.111.111, Port => 21, Passive => 0, Firewall => proxy.xx:3128, Debug => 1)
Net::FTP>>> Net::FTP(2.77)
Net::FTP>>>   Exporter(5.63)
Net::FTP>>>   Net::Cmd(2.29)
Net::FTP>>>   IO::Socket::INET(1.31)
Net::FTP>>>     IO::Socket(1.31)
Net::FTP>>>       IO::Handle(1.28)
Net::FTP=GLOB(0x2640e60): Timeout at /etc/transfer/transfer_get.pl line 106

如果我打开被动模式,我会得到同样的错误。如果我不提供防火墙选项,我也会收到类似的超时错误:

Net::FTP: new(111.111.111.111, Port => 21, Passive => 1, Debug => 1)
main crashed: Can't ftp to 111.111.111.111: Net::FTP: connect: Connection timed out

我非常肯定在阅读Net :: FTP手册后,它不支持通过http代理自行传输。只是想知道什么是实现列出远程文件的mtime然后在Perl中获取它们的最佳方法。

由于

0 个答案:

没有答案