2 # Net.pl: FTP//HTTP helper
4 # Version: v0.1 (20000309)
11 # Usage: &ftpGet($host,$dir,$file,[$lfile]);
13 my ($host,$dir,$file,$lfile) = @_;
16 return unless &loadPerlModule("Net::FTP");
18 &status("FTP: opening connection to $host.") if ($verbose_ftp);
19 my $ftp = Net::FTP->new($host,
21 ### 'BlockSize' => 1024, # ???
28 &status("FTP: logged in successfully.") if ($verbose_ftp);
30 &status("FTP: login failed.");
36 if ($ftp->cwd($dir)) {
37 &status("FTP: changed dirs to $dir.") if ($verbose_ftp);
39 &status("FTP: cwd dir ($dir) does not exist.");
44 # get the size of the file.
46 if ($size = $ftp->size($file)) {
47 &status("FTP: file size is $size") if ($verbose_ftp);
48 my $thisfile = $file || $lfile;
51 $lsize = -s $thisfile;
53 &status("FTP: local size is $lsize; downloading.") if ($verbose_ftp);
55 &status("FTP: same size; skipping.");
56 system("touch $thisfile"); # lame hack.
62 &status("FTP: file does not exist.");
67 my $start_time = &timeget();
69 &status("FTP: getting $file as $lfile.") if ($verbose_ftp);
70 $ftp->get($file,$lfile);
72 &status("FTP: getting $file.") if ($verbose_ftp);
77 &DEBUG("FTP: locsize => '$lsize'.");
78 if ($size != $lsize) {
79 &WARN("FTP: downloaded file seems truncated. FIXME.");
83 my $delta_time = &timedelta($start_time);
84 if ($delta_time > 0 and $verbose_ftp) {
85 &status(sprintf("FTP: %.02f sec to complete.", $delta_time));
86 my ($rateunit,$rate) = ("B", $size / $delta_time);
91 &status(sprintf("FTP: %.01f ${rateunit}/sec.", $rate));
99 # Usage: &ftpList($host,$dir);
101 my ($host,$dir) = @_;
104 return unless &loadPerlModule("Net::FTP");
106 &status("FTP: opening connection to $host.") if ($verbose_ftp);
107 my $ftp = Net::FTP->new($host,'Timeout'=>60);
113 &status("FTP: logged in successfully.") if ($verbose_ftp);
115 &status("FTP: login failed.");
120 # change directories.
121 if ($ftp->cwd($dir)) {
122 &status("FTP: changed dirs to $dir.") if ($verbose_ftp);
124 &status("FTP: cwd dir ($dir) does not exist.");
129 &status("FTP: doing ls.") if ($verbose_ftp);
130 foreach ($ftp->dir()) {
131 # modes d uid gid size month day time file.
132 if (/^(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+) (\S{3})\s+(\d+) \d+:\d+ (.*)$/) {
136 &DEBUG("FTP: UNKNOWN => '$_'.");
139 &status("FTP: ls done. ". scalar(keys %ftp) ." entries.");
146 # Usage: &getURL($url, [$post]);
148 my ($url,$post) = @_;
151 return unless &loadPerlModule("LWP::UserAgent");
153 $ua = new LWP::UserAgent;
154 $ua->proxy('http', $param{'httpProxy'}) if &IsParam("httpProxy");
157 $req = new HTTP::Request('POST',$url);
158 $req->content_type('application/x-www-form-urlencoded');
159 $req->content($post);
161 $req = new HTTP::Request('GET',$url);
164 &status("getURL: getting '$url'");
166 $res = $ua->request($req);
167 my $size = length($res->content);
168 if ($size and time - $time) {
169 my $rate = int( $size/1000/(time - $time) );
170 &status("getURL: Done (took ".&Time2String(time - $time).", $rate k/sec)");
173 # return NULL upon error.
174 return unless ($res->is_success);
176 return(split '\n', $res->content);
180 my ($url,$file) = @_;
183 return unless &loadPerlModule("LWP::Simple");
185 ### PROXY NOT SUPPORTED WITH SIMPLE?
186 ### $ua->proxy('http', $param{'httpProxy'}) if &IsParam("httpProxy");
188 &status("getURLAsFile: getting '$url' as '$file'");
189 my $retval = getstore($url, $file);
190 my $delta_time = time() - $time;
192 my $size = -s $file || 0;
193 my $rate = int($size / $delta_time / 1024);
194 &status("getURLAsFile: Done. ($rate kB/sec)");