2
votes

Comment analyser les attributs de cookie requests.session en python

J'écris un script python 3 pour vérifier les attributs particuliers d'un cookie sur un site sur lequel je travaille. Je m'authentifie actuellement sur le site avec requests.session:

>>> s.cookies['expires']
None

Maintenant, les cookies ont un certain nombre d'attributs dont le nom, le domaine, l'expiration, etc. . Je n'ai pas réussi à trouver une méthode pour exposer tous les attributs en tant que dictionnaire pour un cookie donné afin que je puisse analyser les valeurs attendues.

Y a-t-il une méthode que j'ai manquée? P >

MODIFIER

Mise à jour pour clarifier ce que je vois:

>>> print(s.cookies.get_dict())
{'COOKIE_NAME': 'COOKIE_VALUE'}
>>> print(s.cookies)
<RequestsCookieJar[<Cookie 'COOKIE_NAME'='COOKIE_VALUE' for DOMAIN+PATH>]>
>>> 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)]>

Donc, disons que je voulais obtenir la valeur «expire» pour chaque cookie (remarque ci-dessus, ceci est disponible en exécutant s.cookies). Comment puis-je accéder uniquement à la valeur d'expiration? S'il y a beaucoup de cookies sur mon système, est-il possible de les parcourir tous et de vérifier l'expiration de chacun d'eux?

Quelque chose comme:

SiteLogin = 'https://mytestsite.com/login'
payload = {'username': USER, 'password': PASSWORD}
s = requests.session()
s.post(SiteLogin, data=payload)
s.cookies

p >


3 commentaires

Voulez-vous donc modifier les cookies dans la session ou simplement les imprimer?


Les imprimer, c'est bien. Impossible de trouver un bon moyen d'y accéder en tant qu'attributs individuels.


Super, je viens de soumettre une réponse.


3 Réponses :


1
votes

Donc, pour simplement imprimer les cookies, vous pouvez essayer d'implémenter le code suivant:

payload = {'username': USER, 'password': PASSWORD}
s = requests.session()
s.post(SiteLogin, data=payload)
list(s.cookies)

j'espère que cela vous aidera


9 commentaires

Ainsi, lorsque j'exécute s.cookies.get_dict (), tout ce que j'obtiens est: {'CookieName': 'CookieValue'} Je n'obtiens pas de domaine, chemin, etc. (qui sont affichés par s.cookies). Existe-t-il un moyen pour moi d'obtenir l'attribut «domaine» seul, ou tout autre attribut affiché par s.cookies?


Donc, si vous faites print (s.cookies) , vous obtenez un domaine et un chemin, mais lorsque vous faites print (s.cookies.get_dict ()) vous obtenez seulement {'CookieName': 'CookieValue'} ?


Donc, j'ai essayé plusieurs choses: >>> s.cookies # Renvoie tous les attributs, y compris le domaine, expire, chemin, etc. >>> print (s.cookies) # Renvoie 'CookieName' = 'CookieValue' pour 'Domain' '>>> print (s.cookies.get_dict ()) # Renvoie {' CookieName ':' CookieValue '} Je veux accéder à l'un des attributs individuels renvoyés par s.cookie par cookie. Par exemple, obtenez tous les attributs «expire» pour chaque cookie. J'espérais qu'il y avait un moyen de parcourir un dictionnaire par cookie et d'évaluer les attributs.


Pourriez-vous éventuellement modifier votre question en ajoutant votre sortie actuelle et celle souhaitée, cela aiderait beaucoup!


Édité. Merci pour l'aide Fozoro!


Merci, j'ai modifié mon code même si je ne suis toujours pas sûr à 100% si c'est ce que vous voulez :)


Ajout d'une autre modification ci-dessus, montrant quel serait mon résultat idéal.


Génial! pouvez-vous également fournir SiteLogin (l'URL)?


Ajout de l'URL de test.



1
votes

Alors, j'ai trouvé une solution basée sur la réponse de Fozoro. L'objet cookie dans le cookiejar contient les attributs de membre qui m'intéressaient.

payload = {'username': USER, 'password': PASSWORD}
s = requests.session()
s.post(SiteLogin, data=payload)
for cookie in list(s.cookies):
    print(cookie.expires)


0 commentaires

0
votes

Pour référence future, je vous suggère d'utiliser la syntaxe suivante comme suggéré dans le documentation :

s.cookies.get('expires')


0 commentaires