84 votes

python: urllib2 comment envoyer un cookie avec une demande urlopen

J'essaie d'utiliser urllib2 pour ouvrir l'URL et envoyer un texte de cookie spécifique au serveur. Par exemple, je veux ouvrir le site Résoudre des problèmes d’échecs , avec un cookie spécifique, par exemple search = 1. Comment fait-on ça?

J'essaie de faire ce qui suit:

 import urllib2
(need to add cookie to the request somehow)
urllib2.urlopen("http://chess-problems.prg")
 

Merci d'avance

112voto

Messa Points 5988

Cookie est juste un autre en-tête HTTP.

 import urllib2
opener = urllib2.build_opener()
opener.addheaders.append(('Cookie', 'cookiename=cookievalue'))
f = opener.open("http://example.com/")
 

Voir les exemples urllib2 pour savoir comment ajouter des en-têtes HTTP à votre demande.

Il y a plus de façons de gérer les cookies. Certains modules comme cookielib essaient de se comporter comme un navigateur Web - rappelez-vous des cookies que vous avez obtenus précédemment et renvoyez-les automatiquement dans les requêtes suivantes.

56voto

Morten Jensen Points 1821

Peut-être l'aide d' cookielib.CookieJar peut vous aider. Par exemple, lors de la publication d'une page contenant un formulaire:

import urllib2
import urllib
from cookielib import CookieJar

cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
# input-type values from the html form
formdata = { "username" : username, "password": password, "form-id" : "1234" }
data_encoded = urllib.urlencode(formdata)
response = opener.open("https://page.com/login.php", data_encoded)
content = response.read()

EDIT:

Après Piotr commentaire, je vais développer un peu. À partir de la documentation:

Le CookieJar classe stocke les cookies HTTP. Il extrait les cookies à partir de l'adresse HTTP les demandes, et les renvoie dans les réponses HTTP. CookieJar instances expire automatiquement les contenus des cookies lorsque nécessaire. Les sous-classes sont également responsable pour le stockage et la récupération des cookies à partir d'un fichier ou la base de données.

Donc, tout ce que les demandes que vous faites avec votre CookieJar de l'instance, tous les témoins seront traitées automatiquement. Un peu comme votre navigateur ne :)

13voto

Piotr Dobrogost Points 14412

Vous voudrez peut-être jeter un coup d'œil à l'excellente bibliothèque HTTP Python appelée Requests . Chaque tâche impliquant HTTP est un peu plus facile que urllib2. De la section Cookies du guide de démarrage rapide:

Pour envoyer vos propres cookies au serveur, vous pouvez utiliser le paramètre cookies:

 >>> cookies = dict(cookies_are='working')

>>> r = requests.get('http://httpbin.org/cookies', cookies=cookies)
>>> r.text
'{"cookies": {"cookies_are": "working"}}'
 

5voto

Marcelo Cantos Points 91211

Utilisez cookielib . La page de documentation liée fournit des exemples à la fin. Vous trouverez également un tutoriel ici .

1voto

Martin Points 4034

Cet article devrait vous aider avec ce que vous voulez faire.

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