网络编程-FTP
- FTP:是一种文件传输协议
- 用途:指定一些特殊的上传下载文件的服务
- 用户分类(客户端):登录FTP服务器必须的有一个账号
- Real账户:注册账户
- Guest账户:临时账户
- Anonymous账户:匿名账户,允许任何人
- FTP工作流程:
- 客户端链接远程主机上的FTP服务器
- 客户端输入用户名和密码
- 客户端和服务器进行各种文件传输和信息查询
- 客户端从远程FTP服务区推出,结束传输。
- FTP文件表示:
- 分三段表示FTP服务器上的文件
- HOST:主机地址,类似于ftp.mozilla.org,以ftp开头
- DIR:目录,表示文件所在本地路径
- File:文件名
- 如果想完整精确表示ftp上某一个文件,需要上述三部分组合在一起
FTP包
-
ftplib包
- f = ftplib.FTP() 实例化ftp链接
- f.set_debuglevel(2) 设置链接级别
- ftp.connect("IP","port") 连接的ftp sever和端口
- ftp.login("user","password")#连接的用户名,密码,不填就是匿名用户
- print"ftp.getwelcome()" 打印出欢迎信息
- ftp.cmd("xxx/xxx") 更改远程目录
- ftp.retrbinaly("filename.txt",file_handle,bufsize) 接收服务器上文件并写入本地文件
- filename.txt 需要下载的文件名
- file_handle = open(filename,"wb").write 以写模式在本地打开文件
- bufsize=1024 设置的缓冲区大小
- ftp.set_debuglevel(0) 关闭调试模式
- ftp.quit() 退出ftp
-
ftp相关命令操作
- ftp.cwd(pathname) 设置FTP当前操作的路径
- ftp.dir() 显示目录下文件信息
- ftp.nlst() 获取目录下的文件
- ftp.mkd(pathname) 新建远程目录
- ftp.pwd() 返回当前所在位置
- ftp.rmd(dirname) 删除远程目录
- ftp.delete(filename) 删除远程文件
- ftp.rename(fromname, toname) 将fromname修改名称为toname。
- ftp.storbinaly("STOR filename.txt",file_handel,bufsize) 上传目标文件
- ftp.retrbinary("RETR filename.txt",file_handel,bufsize) 下载FTP文件
import ftplib
import os
import socket
zjm = "ftp.acc.umu.se"
ml = "Public/EFLIB"
wj = "README"
#1.客户端链接远程主机上的FTP服务器
try:
f = ftplib.FTP() #实例化FTP链接
f.set_debuglevel(2) #设置调试级别
f.connect(zjm) #链接主机地址
except Exception as err:
print(err)
exit()
print("已连接到主机:{}".format(zjm))
#2.使用用户名和密码登录主机,不填就是匿名登录
try:
f.login()
except Exception as err:
print(err)
exit()
print("已使用anonymous(匿名登录)")
#3.客户端和服务器进行文件传输和操作
try:
f.cwd(ml) #改变文件目录
except Exception as err:
print(err)
exit()
print("已改变目录到:{}".format(ml))
try:
#从FTP服务器下载文件
#RETR 是ftp命令
#第二个参数是返回函数
#执行RETR命令,下载文件到本地后,运行返回函数
f.retrbinary("RETR {}".format(wj), open(wj, "wb").write)
except Exception as err:
print(err)
exit()
#4. 结束链接
f.quit()