在调用ftp.connect()方法时,我的代码belove给出了错误:socket.gaierror: [Errno 11001] getaddrinfo failed。
我的问题是:为什么我可以连接到google.com,但当连接到ftp服务器时,它给我错误?以及如何从http代理服务器后面连接到ftp服务器?
import ftplib
import urllib.request
# ftp settings
ftpusername = 'abc'
ftppassword = 'xyz'
ftp_host = 'host'
ftp_port = 1234
proxy_url = 'http://username:password@host:port'
proxy_support = urllib.request.ProxyHandler({'http': proxy_url})
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)
#url works ok
f = urllib.request.urlopen('http://www.google.com/')
print(f.read(500))
# Connecting to ftp fails
with ftplib.FTP() as ftp:
ftp.connect(host=ftp_host, ftp_port=port)
ftp.login(user=ftpusername, passwd=ftppassword)
print(ftp.getwelcome())
print(ftp.nlst())
ftp.close()
ftp.quit()发布于 2019-06-27 21:17:27
您可以尝试将FTP url直接发送到HTTP代理。
f = urllib.request.urlopen('ftp://abc:xyz@host/my-file.ext')还要检查其他FTP客户端或浏览器是否成功地与FTP服务器进行迭代。如果他们这样做了,使用像Wireshark这样的网络嗅探器,观察他们是如何与FTP服务器交谈的。
发布于 2018-03-07 03:12:08
您可以使用暂停的FTP连接。它可能会解决这个问题
https://stackoverflow.com/questions/49138118
复制相似问题