I am trying to download a file from FTP server using ftplib library of Python 3.
Here is the relevant code-
ftp = ftplib.FTP("ftp://library.daisy.org:21/User_****/Wise & Otherwise-22.zip")
ftp.login("xxxxx", "xxxxxxx")
ftp.cwd(path)
ftp.retrbinary("RETR " + filename, open(filename, 'wb').write)
ftp.quit()
When I try to run the script the following error shows up-
Traceback (most recent call last):
File "reader.py", line 604, in <module>
sp.process_user_choice()
File "reader.py", line 72, in process_user_choice
self.download_books() File "reader.py", line 324, in download_books
ftp = ftplib.FTP(all_urls[response])
File "/usr/lib/python3.5/ftplib.py", line 118, in __init__
self.connect(host)
File "/usr/lib/python3.5/ftplib.py", line 153, in connect
source_address=self.source_address)
File "/usr/lib/python3.5/socket.py", line 694, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "/usr/lib/python3.5/socket.py", line 733, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known
Some notes-
- I have the correct URL and credentials
- I am behind a proxy server
The host argument of FTP constructor takes, as the name suggests, a hostname only, like library.daisy.org. You are passing in a whole URL.
This is correct:
ftp = ftplib.FTP("library.daisy.org")
The full path goes to an argument of the RETR command:
ftp.retrbinary("RETR User_****/Wise & Otherwise-22.zip", open(filename, 'wb').write)
As you are connecting via proxy, you have to cater for that too.
There are lot of questions here covering that part. But you didn't tell us what kind of proxy you are using, so I cannot be more specific.
来源:https://stackoverflow.com/questions/47900798/python-3-ftplib-error-name-or-service-not-known