109.网络编程-FTP

网络编程-FTP

  • FTP:是一种文件传输协议
  • 用途:指定一些特殊的上传下载文件的服务
  • 用户分类(客户端):登录FTP服务器必须的有一个账号
    • Real账户:注册账户
    • Guest账户:临时账户
    • Anonymous账户:匿名账户,允许任何人
  • FTP工作流程:
    1. 客户端链接远程主机上的FTP服务器
    2. 客户端输入用户名和密码
    3. 客户端和服务器进行各种文件传输和信息查询
    4. 客户端从远程FTP服务区推出,结束传输。
  • FTP文件表示:
    • 分三段表示FTP服务器上的文件
    • HOST:主机地址,类似于ftp.mozilla.org,以ftp开头
    • DIR:目录,表示文件所在本地路径
    • File:文件名
    • 如果想完整精确表示ftp上某一个文件,需要上述三部分组合在一起

FTP包

  • ftplib包

    1. f = ftplib.FTP() 实例化ftp链接
    2. f.set_debuglevel(2) 设置链接级别
    3. ftp.connect("IP","port") 连接的ftp sever和端口
    4. ftp.login("user","password")#连接的用户名,密码,不填就是匿名用户
    5. print"ftp.getwelcome()" 打印出欢迎信息
    6. ftp.cmd("xxx/xxx") 更改远程目录
    7. ftp.retrbinaly("filename.txt",file_handle,bufsize) 接收服务器上文件并写入本地文件
      • filename.txt 需要下载的文件名
      • file_handle = open(filename,"wb").write 以写模式在本地打开文件
      • bufsize=1024 设置的缓冲区大小
    8. ftp.set_debuglevel(0) 关闭调试模式
    9. 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()
posted @ 2020-02-19 11:16  TK_tank  阅读(188)  评论(0编辑  收藏  举报