python ftplib 模塊的使用


ftplib模塊中定義了基於FTP協議的FTP類,可以進行一些FTP工作。以下是一些FTP接口的說明

class ftplib.FTP(host='', user='', passwd='', acct='', timeout=None, source_address=None)*

host 調用connect(host)方法
user 調用login(user, passwd, acct)方法
timeout 超時參數,若不指定則應用全局超時參數
source_address 二元組(host, port),連接前綁定的socket源地址

FTP類方法說明

FTP.set_debuglevel(level) 0:默認,無調試輸出;1:中等調試輸出;2:最大量 調試輸出
該方法用來控制調試輸出的量

FTP.connect(host='', port=0, timeout=None, source_address=None)
host:主機地址;port:根據FTP協議默認端口為21;timeout:若不指定則使用全局超時參數
用於鏈接FTP服務器,鏈接成功后無需再調用

FTP.login(user='anonymous', passwd='', acct='') 參數指定用戶名和密碼,若未指定則匿名訪問。user:'anonymous',passwd:'anonymous@'
只有在鏈接FTP服務器時用以驗證使用

FTP.abort() 無參數
中斷文件傳輸操作,不一定管用,嘗試而已

FTP.getwelcome() 無參數
鏈接成功返回“welcome”信息

FTP.sendcmd(cmd)
發送簡單命令給服務器,並返回相應字符串

FTP.voidcmd(cmd)
發送簡單命令,並處理響應,若響應時成功碼,啥也不返回,否則raise error_replly

FTP.retrbinary(cmd, callback, blocksize=8192, rest=None) cmd:RETR命令,callback:獲取的數據塊將要調用的函數,blocksize:數據塊的最大尺寸,rest:
以BINARY模式獲取文件,

FTP.retrlines(cmd, callback=None) cmd:RETR命令
以ASCII模式獲取文件或者文件夾列表

FTP.set_pasv(val) true:允許被動模式,false:禁用被動模式。默認允許
允許或者禁用被動模式

FTP.storbinary(cmd, fp, blocksize=8192, callback=None, rest=None) cmd:合適的STOR命令。fp:文件對象,以read()方法讀取文件直到EOF,以供存儲。blocksize:數據塊大小。callback:對數據塊進行處理的方法。rest:以BINARY模式存儲文件

FTP.storlines(cmd, fp, callback=None) cmd:合適的STOR命令。fp:文件對象,以readline()方法讀取文件直到EOF,
以供存儲。blocksize:數據塊大小。callback:對數據塊進行處理的方法。rest: 以ASCII模式存儲文件

FTP.transfercmd(cmd, rest=None) cmd:傳輸命令,rest:REST命令
開啟數據連接,主動模式下發送EPRT或者PORT命令,並通過cmd發送傳輸命令,接受連接,被動模式下發送EPSV或者PASV命令,連接服務器並通過cmd發送傳輸命令。兩種模式下都要返回socket套接字

FTP.ntransfercmd(cmd, rest=None)
返回一個包含數據連接和期望數據大小的元組

FTP.mlsd(path="", facts=[]) path:文件夾路徑,facts:期望信息字段列表
用MSLD命令獲取文件下的文件信息列表,返回包含文件名稱和對應信息的元組,其中部分期望信息可能未獲得服務器允許

FTP.nlst(argument[, ...]) argument:文件夾路徑
使用NLST命令獲取文件夾下的文件名稱列表

FTP.dir(argument[, ...]) argument:文件夾路徑
使用LIST命令獲取某路徑下的文件夾列表,默認為當前目錄

FTP.rename(fromname, toname) fromname:舊名稱;toname:新名稱
修改文件名稱

FTP.delete(filename) filename:文件名
移除服務器中的某文件,若成功返回響應文本,否則返回error_perm(許可錯誤) 或 error_reply(其他錯誤)

FTP.cwd(pathname) pathname:文件夾路徑
設置當前文件夾

FTP.mkd(pathname) pathname:文件夾路徑
服務器中新建文件夾

FTP.pwd() 返回當前文件夾的路徑

FTP.rmd(dirname) dirname:文件夾名稱 移除某個文件夾
FTP.size(filename) filename:文件名
請求文件大小,若請求成功則返回整數,否則返回None;該命令非標准命令,但很多服務器支持

FTP.quit() 無參數 向服務器發送QUIT命令后,關閉連接,若服務器無法識別該命令,會響應錯誤
FTP.close() 無參數 單方面關閉連接,無法重復關閉連接

 

 

 

 class ftplib.FTP_TLS(host='', user='', passwd='', acct='', keyfile=None, certfile=None, context=None, timeout=None, source_address=None)

FTP_TLS.ssl_version() 使用的SSL的版本
FTP_TLS.auth() 使用TLS或者SSL建立安全控制鏈接,取決於ssl_version()方法
FTP_TLS.ccc()
FTP_TLS.prot_p() 建立安全的數據連接
FTP_TLS.prot_c() 建立明文數據連接

FTP有兩種傳輸模式:ASCII傳輸模式和BINARY傳輸模式。

ASCII傳輸模式:
該方式可以根據服務器系統對文件進行自動調整,將原始文件的回車換行轉換為系統對應的回車字符,比如Unix下是\n,Windows下是\r\n,Mac下是\r。CGI腳本和普通HTML文件(或其他文本文件)用ASCII模式上傳,而其他的一些文件則使用二進制傳輸模式。
BINARY傳輸模式:
在二進制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對應的。即使目的地機器上包含位序列的文件是沒意義的。例如,macintosh以二進制方式傳送可執行文件到Windows系統,在對方系統上,此文件不能執行。如果你在ASCII方式下傳輸二進制文件,即使不需要也仍會轉譯。這會使傳輸稍微變慢 ,也會損壞數據,使文件變得不能用。(在大多數計算機上,ASCII方式一般假設每一字符的第一有效位無意義,因為ASCII字符組合不使用它。如果你傳輸二進制文件,所有的位都是重要的。)如果你知道這兩台機器具有相同的系統,則二進制方式對文本文件和數據文件都是有效的。
列舉:
ASCII傳輸模式:用HTML和文本編寫的文件必須用ASCII模式上傳
二進制傳輸模式:BINARY模式用來傳送可執行文件,壓縮文件,和圖片文件
FTP支持兩種模式:一種方式叫做Standard (也就是 PORT方式,主動方式), Standard模式下 FTP的客戶端發送 PORT 命令到FTP服務器。另一種是 Passive (也就是PASV,被動方式) ,Passive模式下FTP的客戶端發送 PASV命令到 FTP Server。

Standard模式:
Port模式FTP 客戶端首先和FTP服務器的TCP 21端口建立連接,通過這個通道發送命令,客戶端需要接收數據的時候在這個通道上發送PORT命令。 PORT命令包含了客戶端用什么端口接收數據。在傳送數據的時候,服務器端通過自己的TCP 20端口連接至客戶端的指定端口發送數據。 FTP server必須和客戶端建立一個新的連接用來傳送數據。(可以看到在這種方式下是客戶端和服務器建立控制連接,服務器向客戶端建立數據連接,其中,客戶端的控制連接和數據連接的端口號是大於1024的兩個端口號(臨時端口),而FTP服務器的數據端口為20,控制端口為21)
Passive模式:
Passive模式在建立控制通道的時候和Standard模式類似,但建立連接后發送的不是Port命令,而是Pasv命令。FTP服務器收到Pasv命令后,隨機打開一個臨時端口(也叫自由端口,端口號大於1023小於65535)並且通知客戶端在這個端口上傳送數據的請求,客戶端連接FTP服務器此端口,然后FTP服務器將通過這個端口進行數據的傳送,這個時候FTP server不再需要建立一個新的和客戶端之間的連接。(可以看到這種情況下的連接都是由客戶端向服務器發起的,與下面所說的“為了解決服務器發起到客戶的連接的問題,人們開發了一種不同的FTP連接方式。這就是所謂的被動方式”相對應,而服務器端的數據端口是臨時端口,而不是常規的20)
注意:很多防火牆在設置的時候都是不允許接受外部發起的連接的,所以許多位於防火牆后或內網的FTP服務器不支持PASV模式,因為客戶端無法穿過防火牆打開FTP服務器的高端端口;而許多內網的客戶端不能用PORT模式登陸FTP服務器,因為從服務器的TCP 20無法和內部網絡的客戶端建立一個新的連接,造成無法工作。
————————————————
版權聲明:本文為CSDN博主「小屁豬qAq」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/cl965081198/article/details/82803333

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM