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 ?
Réponses
Trop de publicités?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)
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)
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 ?