Python的网络编程[1] -> FTP 协议[2] -> 使用 ftplib 建立 FTP 客户端
使用 ftplib 建立 FTP 客户端
用于建立FTP Client,与 pyftplib 建立的 Server 进行通信。
快速导航
1. 模块信息
2. 建立 FTP 客户端
1. 模块信息
1.1 常量 / Constants
FTP_PORT = 21 标准的FTP协议服务端端口
1.2 类 / Class
1.2.1 FTP()类
ftp = FTP()
无需参数传入直接生成FTP的客户端实例
1.2.1.1 connect()方法
函数调用: ftp.connect(address)
函数功能:用于客户端连接FTP服务器
传入参数: address
address: tuple类型,包含server IP和端口,address = (ip, port)
返回参数: 无
1.2.1.2 set_debuglevel()方法
函数调用: ftp.set_debuglevel(level)
函数功能:用于设置调试信息输出等级,分别有0,1,2级,0级不输出调试信息
传入参数: level
level: int类型,等级数字可以为0,1,2
返回参数: 无
1.2.1.3 login()方法
函数调用: ftp.login(user, password)
函数功能:用于用户登录
传入参数: user, password
user: str类型,用户名
password: str类型,密码
返回参数: 无
1.2.1.4 getwelcome()方法
函数调用: ftp.getwelcome()
函数功能: 用于获取服务器的欢迎信息
传入参数: 无
返回参数: info
info: str类型,服务端banner设置的欢迎信息
1.2.1.5 retrbinary()方法
函数调用: ftp. retrbinary (cmd, file_handler, bufsize)
函数功能:用于从服务器上下载文件
传入参数: cmd, file_handler, bufsize
cmd: str类型,’RETR ’ + file_name, file_name为要下载的目标文件名
file_handler: type类型,常为open()函数以‘wb’方式打开的一个文件后的write方法,传入后会在内部进行调用,将数据写入
bufsize: int类型,常设置1024
返回参数: 无
1.2.1.6 storbinary()方法
函数调用: ftp. storbinary (cmd, file_handler, bufsize)
函数功能:用于向服务器上传文件
传入参数: cmd, file_handler, bufsize
cmd: str类型,’STOR ’ + file_name, file_name为上传后保存在服务器的文件名
file_handler: type类型,常为open()函数以‘rb’方式打开的一个文件后的方法,传入后会在内部进行调用其read()函数,将数据写入cmd的文件内
bufsize: int类型,常设置1024
返回参数: 无
1.2.1.6 quit()方法
函数调用: ftp.quit()
函数功能:用于退出客户端连接,会想服务端发送QUIT信息
传入参数: 无
返回参数: 无
1.2.1.7 close()方法
函数调用: ftp.close()
函数功能:用于关闭客户端,不会发送信息给服务器
传入参数: 无
返回参数: 无
1.2.1.8 dir()方法
函数调用: ftp.dir()
函数功能:用于显示服务器目录下的信息,会在debug信息中显示
传入参数: 无
返回参数: 无
1.2.1.9 mkd()方法
函数调用: ftp.mkd(dir)
函数功能:用于在服务器目录下新建一个目录,make directory
传入参数: dir
dir: str类型,’.\\’ + path_name, path_name为新建的目录名
返回参数: 无
1.2.1.10 cwd()方法
函数调用: ftp.cwd(dir)
函数功能: 改变服务器工作目录(基于服务器设置的目录进行),change working directory
传入参数: dir
dir: str类型,’.\\’ + path_name, path_name为新建的目录名
返回参数: 无
1.2.1.11 pwd()方法
函数调用: ftp.pwd(dir)
函数功能: 显示当前工作目录,若在根目录则返回’/’, present working directory
传入参数: 无
返回参数: 无
1.2.1.12 rmd()方法
函数调用: ftp.rmd(dir)
函数功能: 移除指定的目录,remove directory
传入参数: dir
dir: str类型,’.\\’ + path_name, path_name为移除的目录名
返回参数: 无
1.2.1.13 delete()方法
函数调用: ftp.delete(file_name)
函数功能: 移除指定的文件
传入参数: file_name
file_name: str类型,为移除的文件名
返回参数: 无
1.2.1.14 rename()方法
函数调用: ftp.rename(from_name, to_name)
函数功能: 更改指定文件名
传入参数: from_name, to_name
from_name: str类型,为原始的文件名
to_name: str类型,为更改后的文件名
返回参数: 无
2 FTP的客户端建立过程
客户端建立步骤主要有:
(1) 设定IP和端口号(常用21), 用户名和密码,匿名为’’;
(2) 生成ftp实例,设置调试信息等级;
(3) connect()函数通过IP和端口连接服务器;
(4) login()函数进行登录
(5) 利用对应函数对服务器文件进行操作
(6) quit()函数结束客户端。
Note: STOR和RETR时设置的bufsize为传输的速度。
下面的代码建立了一个 FTP 客户端,仅做示例,下载文件和目录均被硬编码。
from ftplib import FTP class FTP_Client():
def __init__(self):
# Info for FTP client
ftp_server = '127.0.0.10'
ftp_port = 21
# user_name = 'Customer'
# password = '777777'
user_name = 'Admin'
password = ''
# user_name = ''
# password = '' # Create FTP
self.ftp = FTP()
# set ftp debuglevel here, default is 0
self.ftp.set_debuglevel(1)
self.ftp.connect(ftp_server, ftp_port)
self.ftp.login(user_name, password)
print('<<< Welcome info:', self.ftp.getwelcome()) def updateFile(self):
bufsize = 1024
updateList = []
# Open and read client data that need to be transfer
file_handler = open('FTPClientFile\\testFileCopy.py', 'rb')
# srorbinary need 3 para at least,
# 1st is STOR+dirName, dirName is the file name that save to server,
# 2nd is file_handler, open and read the client file data,
# 3rd is bufsize.
self.ftp.storbinary('STOR ClientTransfer.py', file_handler, bufsize) def downloadFile(self):
bufsize = 1024
downList = ['testFile.py', 'testFile.docx', 'testFile.zip', 'testFile.txt']
# Create an new file to store data received
for down in downList:
file_handler = open('FTPClientFile\\copy_%s' % down, 'wb').write
# retrbinary need 3 para at least,
# 1st is RETR+dirName, dirName is target file name,
# 2nd is a write function, will be called inside function, open a new file in client to store file data,
# 3rd is bufsize.
self.ftp.retrbinary('RETR %s' % down, file_handler, bufsize) def quit(self):
self.ftp.quit() # This function can get all the contains info in server path
def showDir(self):
self.ftp.dir() # All this below function should base on the directory set in server.
# Make a new directory
def newDir(self, dir='.\\FTPtest'):
self.ftp.mkd(dir) # Change working directory
def changeDir(self, dir='.\\FTPtest'):
self.ftp.cwd(dir) # Return current working directory(base is '/')
def presentDir(self):
self.ftp.pwd() # Remove certain directory
def removeDir(self, dir='.\\FTPtest'):
self.ftp.rmd(dir) # Delete file
def delFile(self, fileName):
self.ftp.delete(fileName) # Rename file
def renameFile(self, currName='testFile.py', reName='testFileRename.txt'):
self.ftp.rename(currName, reName) ftp_client = FTP_Client()
ftp_client.downloadFile()
ftp_client.quit()
Note: 在运行客户端之前,需要先运行 ftp 服务器代码。
相关阅读
1. ftp 服务器
Python的网络编程[1] -> FTP 协议[2] -> 使用 ftplib 建立 FTP 客户端的更多相关文章
- Python的网络编程[1] -> FTP 协议[1] -> 使用 pyftplib 建立 FTP 服务器
使用 pyftplib 建立 FTP 服务器 pyftplib 主要用于建立 FTP Server,与 ftplib 建立的 Client 进行通信. 快速导航 1. 模块信息 2. 建立 FTP 服 ...
- Python的网络编程[3] -> BOOTP 协议[1] -> BOOTP 的 Python 实现
BOOTP实现 / BOOTP Implement 目录 BOOTP 的服务器建立过程 BOOTP 的客户端建立过程 Note: 理论部分请参考文末相关阅读链接 1 BOOTP 的服务器建立过程 服务 ...
- Python的网络编程[3] -> BOOTP 协议[0] -> BOOTP 的基本理论
BOOTP协议 / BOOTP Protocol 目录 基本理论 BOOTP 与 DHCP 通信流程 数据报文格式 报文加解码实现 1. 基本理论 / Basic Theory BOOTP(Boots ...
- Python的网络编程[4] -> DHCP 协议[0] -> DHCP 的基本理论
DHCP协议 / DHCP Protocol 目录 DHCP 基本理论 DHCP 通信流程 DHCP 完整报文 DHCP 的 Optional 字段 DHCP 的报文类型 1 DHCP 基本理论 DH ...
- Python的网络编程[6] -> Modbus 协议 -> Modbus 的基本理论与 Python 实现
Modbus协议 / Modbus Protocol 目录 Modbus 协议简介 Modbus RTU协议 Modbus TCP协议与 Python 实现 Modbus 功能码 Modbus TCP ...
- Python的网络编程[2] -> TFTP 协议[0] -> TFTP 的基本理论
TFTP 的基本理论 目录 通信流程 数据报文格式 传输终结 异常处理 数据丢失和超时 TFTP(Trivial File Transfer Protocol,简单文件传输协议)是UDP协议族中的一个 ...
- Python的网络编程[2] -> TFTP 协议[1] -> TFTP 的 Python 实现
TFTP实现 / TFTP Implement 目录 TFTP 的服务器建立过程 TFTP 的客户端建立过程 1 TFTP 的服务器建立过程 服务器建立步骤主要有: (1) 设定服务器IP和 ...
- Python的网络编程[4] -> DHCP 协议[1] -> DHCP 的 Python 实现
DHCP实现 / DHCP Implement 目录 DHCP 服务器建立过程 DHCP 报文加码实现过程 下面介绍建立一个简单的DHCP服务器,主要用于对基本的DHCP请求进行响应,目前只提供一个I ...
- JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo
OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七 ...
随机推荐
- 《Cracking the Coding Interview》——第9章:递归和动态规划——题目4
2014-03-20 03:08 题目:给定一个集合,返回其幂集. 解法:DFS. 代码: // 9.4 Return all subsets of a set #include <cstdio ...
- 《Cracking the Coding Interview》——第5章:位操作——题目2
2014-03-19 05:47 题目:给定一个double型浮点数,输出其二进制表示,如果不能在32个字符内完成输出,则输出“ERROR”. 解法:如果你熟悉IEEE754标准,应该知道double ...
- flask 基础ssti注入
源代码地址 (请用python2.7运行,python3有点出入) 注入点: 不是返回的静态模板而是反回模板字符串变得让客户端可以控制. XSS 这里直接 http://39.105.116.195: ...
- mongoDB坑
1 mongodb.cnf文件中有个选项为bind_id:127.0.0.1,如果是测试环境,需要远程访问的话,就先改成0.0.0.1 auth:如果只是学习的话,建议先改成false,否则后面会有各 ...
- MySQL、MongoDB、Redis 数据库之间的区别与使用(本章迭代更新)
MySQL.MongoDB.Redis 数据库之间的区别与使用 MySQL.MongoDB.Redis 数据库之间的区别与使用(本章迭代更新) update:2019年2月20日 15:21:19(本 ...
- Python学习3,列表
列表就是能够包含几个或者上千上万个元素,对我这种新手来说应该是最重要的了! _author_ = "Happyboy" shopping = ['Iphone','Huawei', ...
- 板载raid 安装Ubuntu 黑屏
最近有碰到过产线反馈supermicro x10主板板载raid安装ubuntu桌面版 ,出现安装完成后黑屏,现象是能正常识别faker raid 但是第一次重启,就会出现黑屏,只有左上角广光标在闪, ...
- 1079 Total Sales of Supply Chain (25 分)(树的遍历)
给出一颗销售供应的树,树根唯一.在树根处货物的价格为p,然后从根节点开始没往结点走一层,该层的货物价格将会在父节点的价格上增加r%.给出每个叶节点的货物量求出他们的价格之和 #include<b ...
- android studio 配置网络代理
1.首先在vultr网站购买服务器. 然后使用shadowsocksR给服务器配置FQ,再在本地机器配置好shadowsocksR. 参考网址:https://github.com/getlanter ...
- 团队项目-第三次scrum 会议
时间:10.25 时长:30分钟 地点:线上 工作情况 团队成员 已完成任务 待完成任务 解小锐 根据初步讨论结果编写初步的api文档 编写project和projectGenerator类 陈鑫 采 ...