191 votes

Comment envoyer des cookies dans une requête post avec la bibliothèque Python Requests ?

J'essaie d'utiliser le Demandes pour envoyer des cookies avec une requête post, mais je ne suis pas sûr de savoir comment configurer les cookies d'après sa documentation. Le script est destiné à être utilisé sur Wikipedia, et le(s) cookie(s) qui doivent être envoyés sont de cette forme :

enwiki_session=17ab96bd8ffbe8ca58a78657a918558e; path=/; domain=.wikipedia.com; HttpOnly

Toutefois, le requests Le quickstart de la documentation donne ce seul exemple :

cookies = dict(cookies_are='working')

Comment puis-je encoder un cookie tel que celui décrit ci-dessus en utilisant cette bibliothèque ? Dois-je le faire avec la bibliothèque de cookies standard de Python, puis l'envoyer avec la requête POST ?

360voto

Kenneth Reitz Points 2590

La dernière version de Requests permet de construire des CookieJars à partir de simples dictionnaires.

import requests

cookies = {'enwiki_session': '17ab96bd8ffbe8ca58a78657a918558'}

r = requests.post('http://wikipedia.org', cookies=cookies)

Bon appétit :)

160voto

oarevalo Points 500

Pour compléter la réponse précédente, si vous reliez deux requêtes entre elles et que vous souhaitez envoyer les cookies renvoyés par la première requête à la seconde (par exemple, pour maintenir une session vivante à travers les requêtes), vous pouvez le faire :

import requests
r1 = requests.post('http://www.yourapp.com/login')
r2 = requests.post('http://www.yourapp.com/somepage',cookies=r1.cookies)

1voto

Try-Harder Points 21

Si vous souhaitez transmettre le cookie au navigateur, vous devez l'ajouter aux en-têtes à renvoyer. Si vous utilisez wsgi :

import requests
...

def application(environ, start_response):
    cookie = {'enwiki_session': '17ab96bd8ffbe8ca58a78657a918558'}
    response_headers = [('Content-type', 'text/plain')]
    response_headers.append(('Set-Cookie',cookie))
...

    return [bytes(post_env),response_headers]

Je parviens à m'authentifier auprès de Bugzilla et TWiki hébergés sur le même domaine que mon script python wsgi en passant auth user/password à mon script python et en transmettant les cookies au navigateur. Cela me permet d'ouvrir les pages Bugzilla et TWiki dans le même navigateur et d'être authentifié. J'essaie de faire la même chose avec SuiteCRM mais j'ai des problèmes avec SuiteCRM qui accepte les cookies de session obtenus par le script python même s'il s'est authentifié avec succès.

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