# FTP编程 FTP(FileTransferProtocal)文件传输协议, 一般专门用来在互联网上客户端和服务器 端进行文件传输使用。 Python中关于FTP的模块是ftplib, 在使用FTP功能前需要导入此模块: # 需要导入相应包,主要是ftplib import ftplib # 关于FTP的操作都在这个包里边 ## FTP账号 登录FTP服务器需要账号,账号分三类: 1. Real账户:注册账户 2. Guest账户:可能是临时的对某一类人的行为进行允许 3. Anonymous账户:匿名账户,允许任何人 账号的分配一般由服务器完成,服务器根据账号功能进行访问控制。 ## FTP的URL URL用来表示互联网中某个资源的具体地址,FTP的URL主要由三部分组成: - HOST:主机地址,类似于 ftp.mozilla.org, 以ftp开头 - DIR:目录, 表示文件所在本地的路径,例如 pub/android/focus/1.1-RC1/ - File: 文件名称, 例如 Klar-1.1-RC1.apk - 如果想完整精确表示ftp上某一个文件,需要上述三部分组合在一起 - FTP默认使用两个端口: 20端口和21端口,一般采用默认就可以 - 一个完整的ftp的URL形如: ftp://ftp.acc.umu.se/Public/EFLIB/README ## FTP的工作流程 FTP的工作流程如下图: ![FTP的共组流程](pic/01_01_031.png) 1. 客户端链接远程主机上的FTP服务器 2. 客户端输入用户名和密码(或者“anonymous”和电子邮件地址) 3. 客户端和服务器进行各种文件传输和信息查询操作 4. 客户端从远程FTP服务器退出,结束传输 ## 示例代码 FTP示例代码如下所示,可能案例使用FTP地址已经失效,如果运行请 输入正确URL, 源代码请咨询QQ群9990960。 # 需要导入相应包,主要是ftplib import ftplib # 关于FTP的操作都在这个包里边 import os import socket # 三部分精确表示在ftp服务器上的某一个文件 # 好多公开ftp服务器访问会出错或者没有反应 HOST = "ftp.acc.umu.se" DIR = 'Public/EFLIB/' FILE = 'README' # 1. 客户端链接远程主机上的FTP服务器 try: f = ftplib.FTP() # 通过设置调试级别可以方便调试 f.set_debuglevel(2) # 链接主机地址 f.connect(HOST) except Exception as e: print(e) exit() print("***Connected to host {0}".format(HOST)) # 2. 客户端输入用户名和密码(或者“anonymous”和电子邮件地址) try: # 登录如果没有输入用户信息,则默认使用匿名登录 f.login() except Exception as e: print(e) exit() print("***Logged in as 'anonymous'") # 3. 客户端和服务器进行各种文件传输和信息查询操作 try: # 更改当前目录到指定目录 f.cwd(DIR) except Exception as e: print(e) exit() print("*** Changed dir to {0}".format(DIR)) try: # 从FTP服务器上下载文件 # 第一个参数是ftp命令 # 第二个参数是回调函数 # 此函数的意思是,执行RETR命令,下载文件到本地后,运行回调函数 f.retrbinary('RETR {0}'.format(FILE), open(FILE, 'wb').write) except Exception as e: print(e) exit() # 4. 客户端从远程FTP服务器退出,结束传输 f.quit()