воскресенье, 14 ноября 2010 г.

Работаем с ftp через curl.

Подробной статьи для чайников я не нагуглил, даже на php, а ftp-uploader написать было необходимо. Поэтому приведу куски кода, которые мне помогли. Во-первых, нам надо залогиниться, юзаем опцию:

# userpwd = "login:parol"
curl.setopt(pycurl.USERPWD,userpwd)

Во-вторых нам надо заливать файлы, делается это так:

size = os.path.getsize(path)
fp = open(path,"rb")
# url = ftp://ftp.host.com/directory/file.txt
curl.setopt(pycurl.URL,url)
curl.setopt(pycurl.UPLOAD,1)
curl.setopt(pycurl.INFILE,fp)
curl.setopt(pycurl.INFILESIZE,size)
curl.perform()

В-третьих, нам надо создавать папки, а для этого нужно юзать команды ftp. Делается это так:

quote = "MKD {0}".format(folder)
curl.setopt(pycurl.URL,host)
curl.setopt(pycurl.POSTQUOTE,[quote])
curl.setopt(pycurl.UPLOAD,0)
curl.perform()

Пока всё, этого мне хватило, чтобы написать uploader. Пришлось немного попариться при создании вложенных папок, но вроде всё работает=) Прокси юзать также как и для http.

5 комментариев:

  1. Про вложенные директории порадовало.
    pydoc pycurl рассказывает про FTP_CREATE_MISSING_DIRS оно не работает?

    ОтветитьУдалить
  2. Сорри, а чем ftplib не угодил?

    ОтветитьУдалить
  3. А чем вас не устроила стандартная библиотека для работы с ftp?

    ОтветитьУдалить
  4. Насчет ftplib. Я что-то не подумал посмотреть на стандартные библиотеки. Сейчас смотрю, не вижу чтобы можно было юзать прокси для фтп, есть они там? За FTP_CREATE_MISSING_DIRS спасибо.

    ОтветитьУдалить
  5. нет там ) я тоже курлом делал.
    для стандартной библиотеки можно враппером канешно поставить сокс, но тогда не будет работать в потоке.
    вообщем курл - самое оно. расширяется и доставляется все малой кровью, лучше его использовать везде.
    из вариантов еще вижу twisted может даже быстрее будет.

    ОтветитьУдалить