Python操作FTP時,TimeoutError: [WinError 10060] 由於連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。 FTPIT技術疑難雜症


原文鏈接:http://blog.raxianch.moe/2018/10/23/%E7%96%91%E9%9A%BE%E6%9D%82%E7%97%87%EF%BC%9APython%E6%93%8D%E4%BD%9CFTP%E6%97%B6%EF%BC%8CTimeoutError-WinError-10060-%E7%94%B1%E4%BA%8E%E8%BF%9E%E6%8E%A5%E6%96%B9%E5%9C%A8%E4%B8%80%E6%AE%B5%E6%97%B6%E9%97%B4%E5%90%8E%E6%B2%A1%E6%9C%89%E6%AD%A3%E7%A1%AE%E7%AD%94%E5%A4%8D%E6%88%96%E8%BF%9E%E6%8E%A5%E7%9A%84%E4%B8%BB%E6%9C%BA%E6%B2%A1%E6%9C%89%E5%8F%8D%E5%BA%94%EF%BC%8C%E8%BF%9E%E6%8E%A5%E5%B0%9D%E8%AF%95%E5%A4%B1%E8%B4%A5%E3%80%82/

 

根據近日寫的簡單實例,進一步編寫,Python連接FTP服務器的簡單實例
發現,能夠通過Python登陸FTP,但是卻無法進行如下操作:

ftp.dir() #顯示目錄下所有目錄信息
ftp.nlst() #獲取目錄下的文件
ftp.mkd(pathname) #新建遠程目錄

這是ftplib模塊自帶的方法,用於FTP操作時獲取信息的,當使用它們的時候出現如下報錯:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
=====================FTP客戶端=====================
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 17:38. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
已連接到: ftp.aixinxi.net
Traceback (most recent call last):
File "D:/workspace/PythonSpace/Spyder/Spyder_aixinxi/aixinxi_FTPlogin.py", line 139, in <module>
main()
File "D:/workspace/PythonSpace/Spyder/Spyder_aixinxi/aixinxi_FTPlogin.py", line 118, in main
mkdir(ftp,dirpath)
File "D:/workspace/PythonSpace/Spyder/Spyder_aixinxi/aixinxi_FTPlogin.py", line 84, in mkdir
if find(ftp, dirpath):
File "D:/workspace/PythonSpace/Spyder/Spyder_aixinxi/aixinxi_FTPlogin.py", line 76, in find
ftp_f_list = ftp.nlst() #獲取目錄下文件、文件夾列表
File "D:\Anaconda3\lib\ftplib.py", line 559, in nlst
self.retrlines(cmd, files.append)
File "D:\Anaconda3\lib\ftplib.py", line 468, in retrlines
with self.transfercmd(cmd) as conn, \
File "D:\Anaconda3\lib\ftplib.py", line 399, in transfercmd
return self.ntransfercmd(cmd, rest)[0]
File "D:\Anaconda3\lib\ftplib.py", line 361, in ntransfercmd
source_address=self.source_address)
File "D:\Anaconda3\lib\socket.py", line 724, in create_connection
raise err
File "D:\Anaconda3\lib\socket.py", line 713, in create_connection
sock.connect(sa)
TimeoutError: [WinError 10060] 由於連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。

主要保存信息:

TimeoutError: [WinError 10060] 由於連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。

經過一番查詢,從stackoverflow上找到了答案,Python ftplib超時

很可能是主動和被動模式之間的沖突。確保滿足以下條件之一:

首先確保服務器支持PASV模式,並且您的客戶端正在設置PASV模式,如果服務器不支持被動模式,則防火牆必須支持主動模式FTP傳輸。

文檔中說到,在Python 2.1及更高版本中默認為被動模式。

在活動模式(非PASV)中,客戶端發送PORT命令,告訴服務器在該端口上啟動DATA連接,這需要您的防火牆知道PORT命令,以便它可以將傳入的DATA連接轉發給您 - 幾乎沒有防火牆支持這個。

在被動模式下,客戶端打開DATA連接,服務器使用它(服務器在打開數據連接時是“被動”)。

如果沒有使用被動模式,請執行ftp.set_pasv(True)並查看是否會產生影響。

在這里,我的需求是需要主動模式!

解決辦法

在發送FTP登陸請求的代碼中,加入:

ftp.set_pasv(False) # 如果被動模式由於某種原因失敗,請嘗試使用活動模式。

以下是我為操作FTP服務器而用Python開發的控制器的部分代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 連接登陸
import sys,os,ftplib,socket,hashlib
def connect():
try:
ftp = ftplib.FTP(HOST) # 實例化FTP對象
ftp.login(username, password) # 登錄
ftp.set_pasv(False) # 如果被動模式由於某種原因失敗,請嘗試使用活動模式。
print(ftp.getwelcome())
print('已連接到: %s' % HOST)
return ftp
except (socket.error,socket.gaierror):
print("FTP登陸失敗,請檢查主機號、用戶名、密碼是否正確")
sys.exit(0)

 

即可解決這個問題!


免責聲明!

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



猜您在找 Scrapy,終端startproject,顯示錯誤TimeoutError: [WinError 10060] 由於連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。 解決 s.connect((host, port)) TimeoutError: [WinError 10060] 由於連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。 關於([WinError 10060] 由於連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。)的解決方案 Failed to establish a new connection: [WinError 10060] 由於連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗 問題解決:URLError urlopen error [WinError 10060]由於連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗 TensorFlow實現Softmax Regression識別手寫數字中"TimeoutError: [WinError 10060] 由於連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗”問題 Python爬蟲報錯-Timeouterror:[WinError 10060]由於連接放在一點時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。 由於連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗問題 requests超時重試方法(由於連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗) requests超時重試方法(由於連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗)
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM