#python #python-3.x #python-requests #cookiejar
#python #python-3.x #python-запросы #cookiejar
Вопрос:
Я пишу скрипт на Python 3 для проверки определенных атрибутов cookie на сайте, над которым я работаю. В настоящее время я выполняю аутентификацию на сайте с помощью requests.session
:
SiteLogin = 'https://mytestsite.com/login'
payload = {'username': USER, 'password': PASSWORD}
s = requests.session()
s.post(SiteLogin, data=payload)
s.cookies
Теперь файлы cookie имеют ряд атрибутов, включая имя, домен, срок действия и т.д.. Я не смог найти метод, который фактически предоставлял бы все атрибуты в виде словаря для данного cookie, чтобы я мог проанализировать ожидаемые значения.
Есть ли метод, который я пропустил?
Редактировать
Обновлено, чтобы уточнить, что я вижу:
>>> s.cookies
<RequestsCookieJar[Cookie(version=0, name='COOKIE_NAME', value='COOKIE_VALUE', port=None, port_specified=False, domain='DOMAIN, domain_specified=False, domain_initial_dot=False, path='PATH', path_specified=True, secure=True, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False)]>
>>> print(s.cookies)
<RequestsCookieJar[<Cookie 'COOKIE_NAME'='COOKIE_VALUE' for DOMAIN PATH>]>
>>> print(s.cookies.get_dict())
{'COOKIE_NAME': 'COOKIE_VALUE'}
Итак, допустим, я хотел получить значение ‘expires’ для каждого cookie (обратите внимание выше, это доступно при запуске s.cookies). Как я могу получить доступ только к значению истечения срока действия? Если в моей системе много файлов cookie, возможно ли просмотреть их все и проверить срок действия для каждого?
Что-то вроде:
>>> s.cookies['expires']
None
Комментарии:
1. Итак, вы хотите изменить файлы cookie в сеансе или просто распечатать их?
2. Распечатать их — это нормально. Не удалось найти хороший способ получить к ним доступ как к отдельным атрибутам.
3. Отлично, я только что отправил ответ.
Ответ №1:
Итак, чтобы просто распечатать файлы cookie, вы можете попробовать реализовать следующий код:
payload = {'username': USER, 'password': PASSWORD}
s = requests.session()
s.post(SiteLogin, data=payload)
list(s.cookies)
надеюсь, это поможет
Комментарии:
1. Итак, когда я запускаю s.cookies.get_dict(), все, что я получаю, это: {‘CookieName’:’CookieValue’} Я не получаю домен, путь и т.д. (которые отображаются в s.cookies). Есть ли способ для меня получить только атрибут ‘domain’ или любой другой атрибут, отображаемый s.cookies?
2. Итак, если при выполнении
print(s.cookies)
вы получаете домен и путь, но при выполненииprint(s.cookies.get_dict())
вы получаете только{'CookieName':'CookieValue'}
?3. Итак, я попробовал несколько вещей: >>> s.cookies # Возвращает все атрибуты, включая домен, срок действия, путь и т.д. >>> print(s.cookies) # Возвращает ‘CookieName’=’CookieValue’ для ‘Домена» >>> print(s.cookies.get_dict()) # Возвращает {‘CookieName’:’CookieValue’} Я хочу получить доступ к любому из отдельных атрибутов, возвращаемых s.cookie для каждого файла cookie. Например, получите все атрибуты ‘expires’ для каждого cookie. Я надеялся, что есть способ перебирать словарь для каждого файла cookie и оценивать атрибуты.
4. Не могли бы вы отредактировать свой вопрос, добавить свой текущий вывод и желаемый, это бы очень помогло!
5. Отредактировано. Спасибо за помощь, Fozoro!
Ответ №2:
Итак, найдено решение, основанное на ответе Fozoro. Объект cookie в cookiejar содержит атрибуты участника, которые меня интересовали.
payload = {'username': USER, 'password': PASSWORD}
s = requests.session()
s.post(SiteLogin, data=payload)
for cookie in list(s.cookies):
print(cookie.expires)
Ответ №3:
Для дальнейшего использования я бы посоветовал вам использовать следующий синтаксис, как предложено в документации:
s.cookies.get('expires')