Python запрашивает set-cookie неправильно установлен - PullRequest
1 голос
/ 30 июня 2019

'Set-cookie' не возвращается должным образом в сеанс запросов.

Код:

import requests

r = requests.Session()
respond = r.put("192.168.1.111/getC", json=data, verify=False)

Давайте проверим cookie ответа (пусто)

respond.cookies
<RequestsCookieJar[]>

Давайте проверим заголовок

respond.headers
{'Content-Type': 'application/json; charset=UTF-8', 'Date': 'Sun, 30 Jun 2019 11:19:05 GMT+00:00', 'Accept-Ranges': 'bytes', 'Server': 'Restlet-Framework/2.3.12', 'Set-Cookie': 'Credentials=sdf34dsfsdf23rsdfsdf234r23r23r; Path=/; Domain=blah.local; Secure'}

Давайте проверим cookie сессии (пусто)

r.cookies
<RequestsCookieJar[]>

Я думаю, requests должен автоматически загрузить set-cookie всессия, верно?Почему он здесь не работает, и как мне установить cookie, используя здесь заголовок?

Ответы [ 2 ]

1 голос
/ 30 июня 2019

Я думаю, здесь нет проблем с requests, возможно, это сервер, который дает вам неправильный ответ.

Похоже, requests не распознает этот Set-Cookie заголовок ответа из-за неподходящего Domain раздела в нем:

'Set-Cookie': 'Credentials=sdf34dsfsdf23rsdfsdf234r23r; Path=/; Domain=blah.local; Secure'

Я настроил тестовый веб-сервер на localhost и попытался установить заголовок Set-Cookie вручную, точно так же, как это указано выше, и куки в ответ были пусты.

Затем я удалил ; Domain=blah.local; Secure часть из заголовка Set-Cookie (директивы Domain и Secure являются необязательными ) и все работало нормально.

0 голосов
/ 30 июня 2019

Создайте Session перед обработкой запросов:

import requests
s = requests.Session()
response = s.put("192.168.1.111/getC", json=data, verify=False)

Как упомянуто в документации https://2.python -requests.org / ru / master / user / advanced / :

Объекты сеанса

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

Затем проверьте куки не в response, а на уровне сеанса:

s.cookies

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...