41 votes

Mettre un « Cookie » dans un « CookieJar »

J'utilise la nouvelle bibliothèque Python Requests pour faire des requêtes http. J'obtiens un cookie du serveur sous forme de texte. Comment puis-je transformer cela en CookieJar avec le cookie dedans ?

50voto

dstanek Points 371

Je suis confus par cette question. La bibliothèque de requêtes mettra les cookies dans le bocal pour vous.

 import requests
import cookielib


URL = '...whatever...'
jar = cookielib.CookieJar()
r = requests.get(URL, cookies=jar)
r = requests.get(URL, cookies=jar)

La première requête à l'URL remplira le pot. La deuxième requête renverra les cookies au serveur. Il en va de même pour le module urllib cookielib de la bibliothèque standard. (doc actuellement disponible pour la version 2.x)

7voto

Danny Points 2433

Je pense que beaucoup de ces réponses manquent le point. Parfois, cette autre bibliothèque n'utilise pas les requêtes sous le capot. Ou n'expose pas le cookiejar qu'il utilise. Parfois, tout ce que nous avons est la chaîne de cookies. Dans mon cas, j'essaie d'emprunter le cookie d'authentification à pyVmomi.

 import requests
import http.cookies
raw_cookie_line = 'foo="a secret value"; Path=/; HttpOnly; Secure; '
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
cookie_jar = requests.cookies.RequestsCookieJar()
cookie_jar.update(simple_cookie)

Ce qui nous donne les cookie_jar :

 In [5]: cookie_jar
Out[5]: <RequestsCookieJar[Cookie(version=0, name='foo', value='a secret value', port=None, port_specified=False, domain='', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=True, expires=None, discard=False, comment='', comment_url=False, rest={'HttpOnly': True}, rfc2109=False)]>

Que nous pouvons utiliser normalement :

 requests.get(..., cookies=cookie_jar)

3voto

fuzzyman Points 3945

Eh bien, cookielib.LWPCookieJar contient des méthodes de chargement et de sauvegarde. Regardez le format et voyez s'il correspond au format de cookie natif, vous pourrez peut-être charger votre cookie directement dans un bocal à cookies à l'aide de StringIO. Alternativement, si les requêtes utilisent urllib2 sous le capot, ne pourriez-vous pas ajouter un gestionnaire de cookies à l'ouvreur par défaut ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X