Search code examples
pythonsocketsftpftplib

Python ftplib: socket.gaierror: [Errno -3] Temporary failure in name resolution


I need to create simple code that will upload a .csv file to an FTP server. The code is below.

import ftplib
import os
import sys
sourceFilePath = '/home/user/dir/'
filename = 'testing.csv'
destinationDirectory = 'anotherDirectory'
server = 'ftp://12.123.12.234'
username = 'aUser'
password = 'passwd1234'
myFTP = ftplib.FTP(server, username, password)
myFTP.cwd('/anotherDirectory/')
myFTP.storbinary('STOR '+filename, open(filename,'rb'))
myFTP.quit()

However, when I run the code, I get the following error:

Traceback (most recent call last):
  File "./UploadToFTP.py", line 20, in <module>
  File "./UploadToFTP.py", line 13, in uploadFileFTP
    myFTP = ftplib.FTP(server, username, password)
  File "/usr/lib64/python2.6/ftplib.py", line 119, in __init__
    self.connect(host)
  File "/usr/lib64/python2.6/ftplib.py", line 134, in connect
    self.sock = socket.create_connection((self.host, self.port), 
self.timeout)
  File "/usr/lib64/python2.6/socket.py", line 553, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno -3] Temporary failure in name resolution

Has anyone seen this before? It seems rather generic to me and doesn't tell me much. So far as other code I've seen performing this same task, I don't have any currently visible errors. Any help would be appreciated.


Solution

  • The host argument of ftplib.FTP constructor is a hostname/IP address, not a URL.

    So this is wrong:

    server = 'ftp://12.123.12.234'
    

    It should be:

    server = '12.123.12.234'
    

    If your URL contains a custom port, see Python ftplib - specify port.