2015-10-16 2 views
16
def download_torrent(url): 
    fname = os.getcwd() + '/' + url.split('title=')[-1] + '.torrent' 
    try: 
     schema = ('http:') 
     r = requests.get(schema + url, stream=True) 
     with open(fname, 'wb') as f: 
      for chunk in r.iter_content(chunk_size=1024): 
       if chunk: 
        f.write(chunk) 
        f.flush() 
    except requests.exceptions.RequestException as e: 
     print('\n' + OutColors.LR + str(e)) 
     sys.exit(1) 

    return fname 

В этом блоке кода я получаю сообщение об ошибке при запуске полного скрипта. Когда я иду фактически загружать торрент, я получаю:Python Запросы get ('Connection aborted.', BadStatusLine ("''",)) error

('Connection aborted.', BadStatusLine("''",)) 

Я только разместил блок кода, который, как я думаю, имеет значение выше. Ниже приведен весь сценарий. Это от pantuts, но я не думаю, что это поддерживается больше, и я пытаюсь запустить его с python3. Из моего исследования ошибка может означать, что я использую http вместо https, но я попробовал оба.

Original script

+0

Не могли бы вы предоставить образец URL-адреса, где это происходит? – TobiMarg

+0

В коде, который вы вставили, отсутствует 'try'. Я получаю другую ошибку: '('Connection aborted.', RemoteDisconnected ('Удаленное закрытое соединение без ответа',))' Надеюсь, что более описательная ошибка поможет вам. – sorbet

+0

hmm. Сценарий при запуске не дает мне url только имя торрента, поэтому я не могу разместить образец URL. Я просто искал изучение python и выбрал первый торрент. Я не уверен, что вы подразумеваете, пропуская попытку. Можете ли вы уточнить? Спасибо за вашу помощь. – eurabilis

ответ

28

Ошибка вы получаете указывает хост не отвечает ожидаемым образом. В этом случае это связано с тем, что обнаруживает, что вы пытаетесь очистить его и намеренно отключить.

Если вы попробуете код requests с этим URL-адресом с тестового веб-сайта: http://mirror.internode.on.net/pub/test/5meg.test1, вы увидите, что он загружается нормально.

Чтобы обойти это, подделайте свой user agent. Ваш агент пользователя идентифицирует ваш веб-браузер, а веб-хосты обычно проверяют его на обнаружение ботов.

Используйте поле headers для установки своего агента. Вот пример, который сообщает веб-хосту, что вы Firefox.

headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0' } 
r = requests.get(url, headers=headers) 

Там много других способов для веб-хосты для обнаружения ботов, но агент пользователя является одним из самых простых и распространенных проверок. Если вы хотите, чтобы ваш скребок был сложнее обнаружить, вы можете попробовать ghost.py.

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