2015-11-25 3 views
0

Я пишу какой-то кеширующий прокси-сервер с Python и Tornado, и мне нужно загрузить различные файлы с удаленного сервера, я использую AsyncHTTPClient с обратными вызовами, чтобы сделать это, и он отлично работает на изображениях, но когда он приходит в видео или 3d модели - функция обратного вызова получает пустую request.body, что я делаю неправильно? Мой код выглядит так:Tornado, как скачать файл?

def test_callback(self, response): 
    print response.body 

def get(self): 
    client = tornado.httpclient.AsyncHTTPClient() 
    client.fetch(remote_url, self.test_callback) 

И он печатает Нет, когда я загружаю видео или 3d модель.

ответ

0

Я думаю, что это происходит потому, что есть ошибка в запросе или запрос тайм-аута, поэтому я предлагаю вам попробовать следующее:

def test_callback(self, response): 
    if response.error: 
     print("Error:", response.error) 
    else: 
     print(response.body) 

Это должно дать вам больше информации. Тем не менее, я думаю, это потому, что запрос держит время. Итак, я предлагаю установить connect_timeout и request_timeout аргументы в AsynHTTPClient - None.

+0

Спасибо, это действительно была ошибка таймаута, но я думаю, что эта ошибка появляется из-за размера файла, она просто не полностью загружается в то время, нормально ли устанавливать 'connect_timeout' и' request_timeout' в 'None 'в таком случае? – bnopne

+0

Да, действительно нет другого пути. Кроме того, вы можете использовать 'CurlAsyncHTTPClient' вместо обычного' AsyncHTTPClient'. –

+0

Я провел исследование и выяснил, что на Tornado 4.2.1 установка 'connect_timeout' и' request_timeout' на 'None' не работает, но при этом она несколько большая, например 3600 секунд (1 час) хорошо. – bnopne

Смежные вопросы