Net::FTP is used to transfer files from remote hosts. With Net::FTP, you can write simple FTP clients that transfer files from remote servers based on information passed on the command line or from hardcoded variables. Here is an example of a client that connects to a remote FTP server and gets a file from the server:
#!/usr/local/bin/perl -w use Net::FTP; $hostname = 'remotehost.com'; $username = 'anonymous'; $password = '[email protected]'; # Hardcode the directory and filename to get $home = '/pub'; $filename = 'TESTFILE'; # Open the connection to the host $ftp = Net::FTP->new($hostname); # Construct object $ftp->login($username, $password); # Log in $ftp->cwd($home),"\n"; # Change directory print $ftp->ls($home),"\n"; # Now get the file and leave $ftp->get($filename); $ftp->quit;
FTP clients have also been integrated with most World Wide Web browsers, using ftp:// in place of http://. When the URL points to a directory, the browser displays a listing of the directory, in which each filename is a link to that file. When the URL points directly to a file, the remote file is downloaded.
Here's an example that uses Net::FTP to list files from a remote FTP server on a web page, with a link from each file to the URL of the file on the remote site:
#!/usr/local/bin/perl -w use Net::FTP; $hostname = 'remotehost.com'; # FTP host $username = 'anonymous'; # Username $password = '[email protected]'; # Password $home = '/pub'; $ftp = Net::FTP->new($hostname); # Net::FTP constructor $ftp->login($username, $password); # Log in w/username and password $pwd = $ftp->pwd; # Get current directory print <<HTML; # Output HTML page Content-type: text/html <HTML> <HEAD> <TITLE>Download Files</TITLE> </HEAD> <BODY> <B>Current working directory:</B> $pwd<BR> Files to download: <P> HTML @entries = $ftp->ls($home); # Slurp all entries into an array foreach (@entries) { # Output links for all files in the ftp area # as links print "<INPUT TYPE=hidden NAME=\"files\" VALUE=\"$_\">\n"; print "<A HREF=\"ftp://$hostname$_\">", "<IMG SRC=\"http://www/icons/f.gif\" border=0>\n"; print " $_</A><BR>\n"; } print <<HTML; </BODY> </HTML> HTML $ftp->quit; # end FTP session
The Net::FTP module implements a subset (as shown earlier in this chapter) of the FTP protocol as defined in RFC 959. In addition to providing the methods shown below, the module inherits from Net::Cmd. Some of the Net::FTP methods return an object derived from the dataconn class (which is in turn derived from the IO::Socket::INET class), as noted in the entries for those methods.
The following methods are defined by Net::FTP.
new |
$ftp = Net::FTP->new(host[, options])
Constructs a new Net::FTP object. Arguments are:
appe |
$ftp->appe(file)
Appends data to the end of the remote file file, which is created if it doesn't exist. If the user calls either pasv or port, returns true or false. Otherwise, returns a reference to a Net::FTP::dataconn object.
append |
$ftp->append(local[, remote])
Appends the contents of a local file to an existing file on the remote system. Arguments are:
ascii |
$ftp->ascii([args])
Changes the type of data transfer to ascii. Like type, without the need to specify the first argument.
authorize |
$ftp->authorize([auth[, resp]])
Authorizes the user to send data outside the firewall, for use with FTP proxies. If authorization auth and response resp are not specified, authorize uses Net::Netrc to do a lookup.
Called with no arguments by login if the connection is through a firewall.
binary |
$ftp->binary([args])
Changes the type of data transfer to binary. Like type, without the need to specify the first argument.
byte |
$ftp->byte([args])
Changes the data transfer type to byte. Not supported. If specified, defaults to binary. Like type, without the need to specify the first argument.
cwd |
$ftp->cwd([dir])
Changes the working directory to dir. With no argument, changes the directory to root.
dir |
$ftp->dir([dir])
Lists the specified server directory in long format. Returns a reference to the list. dir defaults to the current working directory.
ebcdic |
$ftp->ebcdic([args])
Changes the data transfer type to ebcdic. Not supported. If specified, defaults to binary. Like type, without the need to specify the first argument.
get |
$ftp->get(remote[, local])
Retrieves a file from the server. If specified, local is the name to give the file on the local system; otherwise, the name stays the same. Arguments are:
list |
$ftp->list([dir])
Lists a directory, dir, for display. If the user calls either pasv or port, returns true or false. Otherwise, returns a reference to a Net::FTP::dataconn object. If directory is omitted, defaults to the current directory.
login |
$ftp->([login[, passwd[, account]]])
Logs user into an FTP server. Arguments are:
ls |
$ftp->ls([dir])
Lists directory, dir, returning a reference to the list. Defaults to the current working directory.
mkdir |
$ftp->mkdir(dir[, recursive])
Makes a new directory. Arguments are:
nlst |
$ftp->nlst([dir])
Lists a directory, dir, for further processing. With no argument, defaults to the current directory. If the user calls either pasv or port, returns true or false. Otherwise, returns a reference to a Net::FTP::dataconn object.
pasv_wait |
$ftp->pasv_wait(server)
Waits for a transfer to complete between a passive and a nonpassive server, in which server is the Net::FTP object for the nonpassive server.
pasv_xfer |
$ftp->pasv_xfer(file1, server, [file2])
Transfers a file between two remote servers. Arguments are:
pasv_xfer_unique |
$ftp->pasv_xfer_unique(file1, server[, file2])
Like pasv_xfer, but stores the file on the remote server with a new (unique) name.
port |
$ftp->port([port])
Sends a PORT command telling the server to use port port. With no argument, a socket is created, and its information is sent.
put |
$ftp->put(local[, remote])
Puts a file onto the server. Arguments are:
put_unique |
$ftp->put_unique(local[, remote])
Puts a file with a unique name onto the server. Arguments are:
quot |
$ftp->quot(cmd[, args])
Sends a literal FTP protocol command to the server and waits for a response. Returns the most significant digit of the response code.
rename |
$ftp->rename(file1, file2)
Renames a file on the server. Arguments are:
retr |
$ftp->retr(file)
Retrieves file file from the remote server. If the user calls either pasv or port, returns true or false. Otherwise, returns a reference to a Net::FTP::dataconn object.
stor |
$ftp->stor(file)
Tells the server to store a new file under the name file. If the user calls either pasv or port, returns true or false. Otherwise, returns a reference to a Net::FTP::dataconn object.
stou |
$ftp->stou(file)
Like stor, but stores file on the remote server with a unique name, file. If the user calls either pasv or port, returns true or false. Otherwise, returns a reference to a Net::FTP::dataconn object.
type |
$ftp->type(type[, args])
Changes the type of data transfer. Possible types are ascii, ebcdic, byte, and binary. The value of args depends on the type.
Copyright © 2002 O'Reilly & Associates. All rights reserved.