Python-запросы (>= 1.*):Как отключить поддержку активности?
-
21-12-2019 - |
Вопрос
Я пытаюсь запрограммировать простой веб-сканер с использованием модуля Requests, и мне хотелось бы знать, как отключить его функцию поддержания активности по умолчанию.
Я попробовал использовать:
s = requests.session()
s.config['keep_alive'] = False
Однако я получаю сообщение об ошибке, в котором говорится, что объект сеанса не имеет атрибута «config». Я думаю, что он был изменен в новой версии, но я не могу найти, как это сделать в официальной документации.
Правда в том, что когда я запускаю сканер на определенном веб-сайте, он получает максимум пять страниц, а затем продолжает циклически повторяться, поэтому я подумал, что это как-то связано с функцией поддержания активности!
ПС:Является ли Requests хорошим модулем для веб-сканера?есть что-то более адаптированное?
Спасибо !
Решение
Это работает
s = requests.session()
s.keep_alive = False
.
Другие советы
Я не уверен, но вы можете попробовать пропустить передачу {"соединения": «Закрыть»} в качестве заголовков HTTP при отправке запроса на получение запросов.Это закроет соединение, как только сервер возвращает ответ.
>>> headers = {"Connection": "close"}
>>> r = requests.get('https://example.xcom', headers=headers)
. Как предположил @praveen, от нас ожидается использование HTTP/1.1
заголовок Connection: close
чтобы уведомить сервер о том, что соединение следует закрыть после завершения ответа.
Вот как это описано в РФК 2616:
HTTP/1.1 определяет опцию «закрыть» соединения, позволяющую отправителю сигнализировать о том, что соединение будет закрыто после завершения ответа.Например,
Connection: close
в полях заголовка запроса или ответа указывает, что соединение НЕ ДОЛЖНО считаться «постоянным» (раздел 8.1) после завершения текущего запроса/ответа.
Приложения HTTP/1.1, которые не поддерживают постоянные соединения, ДОЛЖНЫ включать опцию «закрыть» соединение в каждое сообщение.