2008-10-09 10 views
138

Je veux télécharger et analyser la page Web en utilisant python, mais pour y accéder j'ai besoin d'un couple de cookies. Par conséquent, je dois d'abord vous connecter via https à la page Web. Le moment de connexion implique l'envoi de deux paramètres POST (nom d'utilisateur, mot de passe) à /login.php. Au cours de la demande de connexion, je veux récupérer les cookies de l'en-tête de réponse et les stocker afin que je puisse les utiliser dans la demande de téléchargement de la page web /data.php.Comment utiliser Python pour vous connecter à une page Web et récupérer des cookies pour un usage ultérieur?

Comment ferais-je cela en python (de préférence 2.6)? Si possible, je veux seulement utiliser des modules intégrés.

Répondre

144
import urllib, urllib2, cookielib 

username = 'myuser' 
password = 'mypassword' 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
login_data = urllib.urlencode({'username' : username, 'j_password' : password}) 
opener.open('http://www.example.com/login.php', login_data) 
resp = opener.open('http://www.example.com/hiddenpage.php') 
print resp.read() 

resp.read() est le code html droite de la page que vous souhaitez ouvrir, et vous pouvez utiliser opener pour afficher une page en utilisant votre cookie de session.

+9

'resp.read()' vous donnera le contenu –

+1

Est-ce sûr? Cela ne permettra-t-il pas aux renifleurs de paquets de voir des mots de passe en clair? L'utilisation de Https serait-elle plus sûre? – Heartinpiece

+2

@Heartinpiece Oui, si le serveur l'offre, vous devez utiliser HTTPS. –

149

est ici une version en utilisant l'excellente bibliothèque requests:

from requests import session 

payload = { 
    'action': 'login', 
    'username': USERNAME, 
    'password': PASSWORD 
} 

with session() as c: 
    c.post('http://example.com/login.php', data=payload) 
    response = c.get('http://example.com/protected_page.php') 
    print(response.headers) 
    print(response.text) 
+27

+1 c'est la façon moderne de le faire en python. –

+2

Est-ce que ''action': 'login' 'est réellement nécessaire dans cet exemple, ou est-ce juste un paramètre supplémentaire qui est envoyé avec la requête? – Ted

+1

@Ted Cette partie est totalement nécessaire. –