Python Запрашивает получение ( "Соединение прервано"., BadStatusLine ("'' ',)) error

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

В этом блоке кода я получаю сообщение об ошибке при запуске полного script. Когда я иду на загрузку торрента, я получаю:

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

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

Оригинал script

Ответы

Ответ 1

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

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

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

Используйте поле 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.