Загрузка файла Basecamp с использованием Python - PullRequest
0 голосов
/ 06 сентября 2011

Согласно документации Basecamp API, файлы должны загружаться с использованием HTTP POST с типом контента, установленным в application / octet-stream, и телом запроса, содержащим двоичное содержимое файла (см. http://developer.37signals.com/basecamp/). Мне бы хотелосьдля потоковой передачи файла, а не для чтения всего этого в память. Я использую Python 2.7.

Я вижу несколько возможностей:

  • Сделайте это с помощью сокета низкого уровняAPI.
  • Используйте urllib2 с Poster (http://atlee.ca/software/poster/) для обработки потокового файла. Однако в Poster вы регистрируете специальные открыватели для потоковой передачи файлов, и я уже явно использую свой собственный открыватель (передавая егодля build_opener) для обработки аутентификации на сервере Basecamp. Также в документации для постеров говорится только о публикации данных формы, и мне пока неясно (все еще читает исходный код), может ли он обрабатывать поток октетов.
  • Использовать httplibПохоже, что это даст мне более низкоуровневую обработку данных POST (поэтому я могу использовать octet-stream), но я все еще не вижупростой способ для потоковой передачи файла.

Я нашел Python: HTTP Опубликовать большой файл с потоковой передачей , но это звучит так, если я не хочу использовать формат данных формы, я бынадо залатать httplib (!).Этому посту уже год, поэтому я надеюсь, что теперь есть лучший способ.

Сейчас я занимаюсь созданием своего собственного миксина, как это делает Poster, но меня интересует: действительно ли это так сложно?Разве нет более простого способа справиться с тем, что мне кажется относительно стандартным вариантом использования?

1 Ответ

0 голосов
/ 07 сентября 2011

Я закончил тем, что использовал Twisted для этого, так как мне все равно требовалось, чтобы загрузка происходила асинхронно. Этот отличный пост в блоге объясняет общую процедуру: http://marianoiglesias.com.ar/python/file-uploading-with-multi-part-encoding-using-twisted/. Я просто написал своего собственного продюсера, чтобы записать необработанные двоичные данные в качестве полезной нагрузки POST.

...