J'essaie d'ajouter un cookie à un cookiejar existant à l'aide de la bibliothèque python demande la bibliothèque 1.2.3. Chaque fois que j'ajoute le nouveau cookie, les données du pot sont munies pour le nouveau cookie. Clés manquant, valeurs manquantes ou correspondant à des clés incorrectes. Je ne sais pas s'il s'agit d'un bogue de bibliothèque de demande ou je n'envoie pas le cookie correctement. J'utilise le code suivant qui entraîne un mauvais cookie dans cookiejar. Suis-je formater le cookie correctement? Des idées?
my_cookie = {
'domain':'www.mydomain.com',
'expires':None,
'name':'COOKIE_NAME',
'path':'/',
'value':'the cookie works',
'version':0
}
s = requests.Session()
requests.utils.add_dict_to_cookiejar(s.cookies, my_cookie)
J'ai trouvé un moyen de le faire en important CookieJar, Cookie et cookies. Avec l'aide de @Lukasa, il m'a montré un meilleur moyen. Cependant, à sa manière, je n'ai pas pu spécifier les attributs "port_specified", "domain_specified", "domain_initial_dot" ou "path_specified". La méthode "set" le fait automatiquement avec les valeurs par défaut. J'essaie de gratter un site Web et leur cookie a des valeurs différentes dans ces attributs. Comme je suis nouveau dans tout cela, je ne sais pas encore si cela compte vraiment.
my_cookie = {
"version":0,
"name":'COOKIE_NAME',
"value":'true',
"port":None,
# "port_specified":False,
"domain":'www.mydomain.com',
# "domain_specified":False,
# "domain_initial_dot":False,
"path":'/',
# "path_specified":True,
"secure":False,
"expires":None,
"discard":True,
"comment":None,
"comment_url":None,
"rest":{},
"rfc2109":False
}
s = requests.Session()
s.cookies.set(**my_cookie)
import requests
s = requests.session()
# Note that domain keyword parameter is the only optional parameter here
cookie_obj = requests.cookies.create_cookie(domain='www.domain.com',name='COOKIE_NAME',value='the cookie works')
s.cookies.set_cookie(cookie_obj)
Je ne sais pas si cette technique était valide lorsque la question d'origine a été posée, mais idéalement, vous généreriez votre propre objet cookie à l'aide de requests.cookies.create_cookie (nom, valeur, ** kwargs) , puis ajoutez-le dans le pot de cookies via requests.cookies.RequestsCookieJar.set_cookie (cookie, * args, ** kwargs) . Voir la source/documentation ici .
>>> import requests
>>> s = requests.session()
>>> print(s.cookies)
<RequestsCookieJar[]>
>>> required_args = {
'name':'COOKIE_NAME',
'value':'the cookie works'
}
>>> optional_args = {
'version':0,
'port':None,
#NOTE: If domain is a blank string or not supplied this creates a
# "super cookie" that is supplied to all domains.
'domain':'www.domain.com',
'path':'/',
'secure':False,
'expires':None,
'discard':True,
'comment':None,
'comment_url':None,
'rest':{'HttpOnly': None},
'rfc2109':False
}
>>> my_cookie = requests.cookies.create_cookie(**required_args,**optional_args)
# Counter-intuitively, set_cookie _adds_ the cookie to your session object,
# keeping existing cookies in place
>>> s.cookies.set_cookie(my_cookie)
>>> s.cookies
<RequestsCookieJar[Cookie(version=0, name='COOKIE_NAME', value='the cookie works', port=None, port_specified=False, domain='www.domain.com', domain_specified=True, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False)]>
>>> my_super_cookie = requests.cookies.create_cookie('super','cookie')
>>> s.cookies.set_cookie(my_super_cookie)
# Note we have both our previous cookie and our new cookie
>>> s.cookies
<RequestsCookieJar[Cookie(version=0, name='super', value='cookie', port=None, port_specified=False, domain='', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False), Cookie(version=0, name='COOKIE_NAME', value='the cookie works', port=None, port_specified=False, domain='www.domain.com', domain_specified=True, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False)]>
# Deleting is simple, note that this deletes the cookie based on the name,
# if you have multiple cookies with the same name it will raise
# requests.cookies.CookieConflictError
>>> del s.cookies['super']
>>> s.cookies
<RequestsCookieJar[Cookie(version=0, name='COOKIE_NAME', value='the cookie works', port=None, port_specified=False, domain='www.domain.com', domain_specified=True, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False)]>
plain_cookie = 'nopubuser_abo=1; groupenctype_abo=1'
cj = requests.utils.cookiejar_from_dict(dict(p.split('=') for p in plain_cookie.split('; ')))
sess = requests.Session()
sess.cookies = cj