Согласно документации 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, но меня интересует: действительно ли это так сложно?Разве нет более простого способа справиться с тем, что мне кажется относительно стандартным вариантом использования?