2 # Net.pl: FTP//HTTP helper
4 # Version: v0.1 (20000309)
8 if (&IsParam("useStrict")) { use strict; }
12 # Usage: &ftpGet($host,$dir,$file,[$lfile]);
14 my ($host,$dir,$file,$lfile) = @_;
17 return unless &loadPerlModule("Net::FTP");
19 &status("FTP: opening connection to $host.") if ($verbose_ftp);
20 my $ftp = Net::FTP->new($host,
22 ### 'BlockSize' => 1024, # ???
29 &status("FTP: logged in successfully.") if ($verbose_ftp);
31 &status("FTP: login failed.");
37 if ($ftp->cwd($dir)) {
38 &status("FTP: changed dirs to $dir.") if ($verbose_ftp);
40 &status("FTP: cwd dir ($dir) does not exist.");
45 # get the size of the file.
47 if ($size = $ftp->size($file)) {
48 &status("FTP: file size is $size") if ($verbose_ftp);
49 my $thisfile = $file || $lfile;
52 $lsize = -s $thisfile;
54 &status("FTP: local size is $lsize; downloading.") if ($verbose_ftp);
56 &status("FTP: same size; skipping.");
57 system("touch $thisfile"); # lame hack.
63 &status("FTP: file does not exist.");
68 my $start_time = &timeget();
70 &status("FTP: getting $file as $lfile.") if ($verbose_ftp);
71 $ftp->get($file,$lfile);
73 &status("FTP: getting $file.") if ($verbose_ftp);
78 &DEBUG("FTP: locsize => '$lsize'.");
79 if ($size != $lsize) {
80 &WARN("FTP: downloaded file seems truncated. FIXME.");
84 my $delta_time = &timedelta($start_time);
85 if ($delta_time > 0 and $verbose_ftp) {
86 &status(sprintf("FTP: %.02f sec to complete.", $delta_time));
87 my ($rateunit,$rate) = ("B", $size / $delta_time);
92 &status(sprintf("FTP: %.01f ${rateunit}/sec.", $rate));
100 # Usage: &ftpList($host,$dir);
102 my ($host,$dir) = @_;
105 return unless &loadPerlModule("Net::FTP");
107 &status("FTP: opening connection to $host.") if ($verbose_ftp);
108 my $ftp = Net::FTP->new($host,'Timeout'=>60);
114 &status("FTP: logged in successfully.") if ($verbose_ftp);
116 &status("FTP: login failed.");
121 # change directories.
122 if ($ftp->cwd($dir)) {
123 &status("FTP: changed dirs to $dir.") if ($verbose_ftp);
125 &status("FTP: cwd dir ($dir) does not exist.");
130 &status("FTP: doing ls.") if ($verbose_ftp);
131 foreach ($ftp->dir()) {
132 # modes d uid gid size month day time file.
133 if (/^(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+) (\S{3})\s+(\d+) \d+:\d+ (.*)$/) {
137 &DEBUG("FTP: UNKNOWN => '$_'.");
140 &status("FTP: ls done. ". scalar(keys %ftp) ." entries.");
147 # Usage: &getURL($url, [$post]);
149 my ($url,$post) = @_;
152 return unless &loadPerlModule("LWP::UserAgent");
154 $ua = new LWP::UserAgent;
155 $ua->proxy('http', $param{'httpProxy'}) if &IsParam("httpProxy");
158 $req = new HTTP::Request('POST',$url);
159 $req->content_type('application/x-www-form-urlencoded');
160 $req->content($post);
162 $req = new HTTP::Request('GET',$url);
165 &status("getURL: getting '$url'");
167 $res = $ua->request($req);
168 my $size = length($res->content);
169 if ($size and time - $time) {
170 my $rate = int( $size/1000/(time - $time) );
171 &status("getURL: Done (took ".&Time2String(time - $time).", $rate k/sec)");
174 # return NULL upon error.
175 return unless ($res->is_success);
177 return(split '\n', $res->content);
181 my ($url,$file) = @_;
184 return unless &loadPerlModule("LWP::Simple");
186 ### PROXY NOT SUPPORTED WITH SIMPLE?
187 ### $ua->proxy('http', $param{'httpProxy'}) if &IsParam("httpProxy");
189 &status("getURLAsFile: getting '$url' as '$file'");
190 my $retval = getstore($url, $file);
191 my $delta_time = time() - $time;
193 my $size = -s $file || 0;
194 my $rate = int($size / $delta_time / 1024);
195 &status("getURLAsFile: Done. ($rate kB/sec)");