Keep-alive в модуле python-requests

У меня вопрос по поводу модуля python-requests. Согласно документам

Благодаря urllib3, keep-alive выполняется на 100 % автоматически в течение сеанса! Любые запросы, которые вы делаете в рамках сеанса, автоматически повторно используют соответствующее соединение!

Мой пример кода выглядит так:

def make_double_get_request():
    response = requests.get(url=API_URL, headers=headers, timeout=10)
    print response.text
    response = requests.get(url=API_URL, headers=headers, timeout=10)
    print response.text

Но журнал, который я получаю, сообщает, что с каждым запросом начинается новое HTTP-соединение:

INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): url
DEBUG:requests.packages.urllib3.connectionpool:"GET url HTTP/1.1" 200 None
response text goes here
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): url
DEBUG:requests.packages.urllib3.connectionpool:"GET url HTTP/1.1" 200 None
response text goes here

Я делаю что-то неправильно? Глядя на пакеты с помощью wireshark, кажется, что они действительно имеют набор keep-alive.


person mateuszb    schedule 02.07.2016    source источник


Ответы (1)


Используйте Session() пример:

def make_double_get_request():
    session = requests.Session()
    response = session.get(url=API_URL, headers=headers, timeout=10)
    print response.text
    response = session.get(url=API_URL, headers=headers, timeout=10)
    print response.text

Функции методов HTTP верхнего уровня requests представляют собой удобный API, который каждый раз создает новый объект Session, предотвращая повторное использование соединений.

Из документации:

Объект Session позволяет сохранять определенные параметры между запросами. Он также сохраняет файлы cookie для всех запросов, сделанных из экземпляра Session, и будет использовать пул соединений urllib3.

person Martijn Pieters    schedule 02.07.2016