Python 通过http代理连接到FTP服务器

Python 通过http代理连接到FTP服务器,python,python-3.x,ftp,urllib,ftplib,Python,Python 3.x,Ftp,Urllib,Ftplib,下面的代码告诉我错误:socket.gaierro:[Errno 11001]getaddrinfo调用ftp.connect()方法时失败 我的问题是:为什么我可以连接到google.com,但当连接到ftp服务器时,它会给我错误?以及如何从http代理后面连接到ftp服务器 import ftplib import urllib.request # ftp settings ftpusername = 'abc' ftppassword = 'xyz' ftp_host = 'host'

下面的代码告诉我错误:
socket.gaierro:[Errno 11001]getaddrinfo调用ftp.connect()方法时失败

我的问题是:为什么我可以连接到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()

您可以使用pasive FTP连接。这可能会解决问题

您可以尝试将FTP url直接发送到HTTP代理

 f = urllib.request.urlopen('ftp://abc:xyz@host/my-file.ext')
还应检查其他FTP客户端或浏览器是否成功地与FTP服务器交互。
如果他们这样做,请使用网络嗅探器,如,观察他们如何与FTP服务器通信。

HTTP与FTP是完全不同的协议。HTTP代理无法帮助您使用FTP。我支持HTTP代理。然后如何连接到ftp服务器?您需要另一种代理,或者需要使用HTTP而不是ftp。@tadman这不是真的。FTP协议可以通过HTTP代理工作。任何像样的FTP客户端都可以做到这一点。例如,选中依赖于代理和支持代理的客户端的。