Поток = True сделает меня медленным нападающим лори, если я прерву цикл r.iter_lines () в Python? - PullRequest
1 голос
/ 04 апреля 2019

Я очищу сайт, используя этот код (который работает), но я не уверен, как requests.get() обрабатывает stream=True, когда цикл прерывается с break.

Это минимальный рабочий код:

import requests
# Not my real target
base_url='https://www.umu.se/?page='
# Real range will be range(1, 250000)
for url in [base_url + str(i) for i in range(1, 3)]:
    chunks = []

    with requests.get(url, stream=True) as r:
        r.raise_for_status()
        for chunk in r.iter_lines(): 
            try:
                if chunk.decode() == '</head>':
                    # Here I parse the data
                    # parse_my_data( ''.join(chunks) )
                    break

                chunks.append(chunk.decode())
            except:
                # This should't happen

Причина всего этого зацикливания в том, что я хочу, чтобы он загружался с сервера только до конца <header>, тем самым сохраняя на хост-сервере большой трафик.

Что еще более важно, я не хочу, чтобы цикл оставлял открытыми http-запросы. При использовании break в цикле в состоянии with этот скрипт зависает на удаленном сервере, заставляя сервер отключаться по сети при каждом моем запросе? Если так, то я в основном написал сценарий, похожий на медленную атаку лори, , которую я совершенно не хочу .

Сохраняет ли этот скрипт трафик, и можно ли его безопасно запустить?

...