Ich versuche, Dateien von FTP herunterzuladen. Es funktioniert gut zu Hause, aber es funktioniert nicht, wenn ich durch Firmennetzwerk laufe. Ich weiß, dass es etwas mit Proxy zu tun hat. Ich habe ein paar Posts bezüglich des Proxy-Problems in Python angeschaut. Ich habe versucht, eine Verbindung zum Proxy herzustellen. Es funktioniert in Ordnung für die URL, aber es scheiterte bei der Verbindung zu FTP. Kennt jemand einen Weg, das zu tun? Danke im Voraus.Verbindung mit ftplib über FTP-Proxy in Python?
Unten ist mein Code:
import os
import urllib
import ftplib
from ftplib import FTP
from getpass import getpass
from urllib.request import urlopen, ProxyHandler, HTTPHandler, HTTPBasicAuthHandler, \
build_opener, install_opener
user_proxy = "XXX"
pass_proxy = "YYY"
url_proxy = "ZZZ"
port_proxy = "89"
url_proxy = "ftp://%s:%[email protected]%s:%s" % (user_proxy, pass_proxy, url_proxy, port_proxy)
authinfo = urllib.request.HTTPBasicAuthHandler()
proxy_support = urllib.request.ProxyHandler({"ftp" : url_proxy})
# build a new opener that adds authentication and caching FTP handlers
opener = urllib.request.build_opener(proxy_support, authinfo,
urllib.request.CacheFTPHandler)
# install it
urllib.request.install_opener(opener)
#url works ok
f = urllib.request.urlopen('http://www.google.com/')
print(f.read(500))
urllib.request.install_opener(opener)
#ftp is not working
ftp = ftplib.FTP('ftp:/ba1.geog.umd.edu', 'user', 'burnt_data')
Die Fehlermeldung bekam ich:
730 # and socket type values to enum constants.
731 addrlist = []
--> 732 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
733 af, socktype, proto, canonname, sa = res
734 addrlist.append((_intenum_converter(af, AddressFamily),
gaierror: [Errno 11004] getaddrinfo failed
Ich kann über den Proxy-Verbindung über FileZilla, indem Sie benutzerdefinierte FTP-Proxy mit Spezifikation:
USER %[email protected]%h %s
PASS %p
ACCT %w
Ihr "url" Beweis scheint verdächtig. Sie erstellen 'ftp: //' proxy für 'ftp'-Protokoll. Und wenn Sie 'http: //' URL öffnen. Ich glaube nicht, dass der Proxy überhaupt in diese Anfrage involviert ist. Ich bin mir ziemlich sicher, dass 'f = urllib.request.urlopen ('http://www.google.com/')' auch ohne den vorherigen Proxy-Code funktioniert. –
Auch Sie müssen uns sagen, welche Art von Proxy Sie verwenden. Ist das HTTP, SOCKS oder FTP-Proxy? Idealerweise zeigen Sie uns eine Protokolldatei eines beliebigen eigenständigen FTP-Clients (z. B. WinSCP) an, der für die Verwendung dieses Proxys konfiguriert ist. –
Danke Martin, ich habe den Screenshot des FTP-Proxy von fileZilla oben eingefügt. Ich verstehe immer noch nicht, wie ich den Code ändern soll. –