2010-12-03 22 views
2


Je voudrais accéder à une page Web à partir d'un programme python. Je dois configurer des cookies pour charger la page.
J'ai utilisé la bibliothèque httplib2, mais je ne trouve pas comment ajouter mon propre cookiePython créer des cookies, puis charger une page avec les cookies

resp_headers, content = h.request("http://www.theURL.com", "GET") 

Comment puis-je créer des cookies avec le bon nom et la valeur, ajoutez-le à la fonction, puis charger la page?
Merci

Répondre

5
http = httplib2.Http() 
# get cookie_value here 
headers = {'Cookie':cookie_value} 
response, content = http.request("http://www.theURL.com", 'GET', headers=headers) 

Vous voudrez peut-être ajouter un autre paramètres d'en-tête pour spécifier un autre paramètres de la requête HTTP.

11

De http://code.google.com/p/httplib2/wiki/Examples espoir) contribuera

Cookies

Lorsque vous automatisez quelque chose, vous avez souvent besoin de « login » pour maintenir une sorte de séance/état avec le serveur. Parfois, ceci est réalisé avec une authentification basée sur des formulaires et des cookies. Vous publiez un formulaire sur le serveur et il répond avec un cookie dans l'en-tête HTTP entrant. Vous devez renvoyer ce cookie au serveur dans les demandes suivantes pour conserver l'état ou maintenir une session active.

Voici un exemple de gestion des cookies lors de la publication de votre message HTTP.

En premier lieu, permet d'importer les modules que nous utiliserons:

 
import urllib 
import httplib2 

Maintenant, permet de définir les données que nous aurons besoin. Dans ce cas, nous faisons un post de formulaire avec 2 champs représentant un nom d'utilisateur et un mot de passe.

 
url = 'http://www.example.com/login' 
body = {'USERNAME': 'foo', 'PASSWORD': 'bar'} 
headers = {'Content-type': 'application/x-www-form-urlencoded'} 

Maintenant, nous pouvons envoyer la requête HTTP:

 
http = httplib2.Http() 
response, content = http.request(url, 'POST', headers=headers, body=urllib.urlencode(body)) 

À ce stade, notre variable « réponse » contient un dictionnaire des champs d'en-tête HTTP qui ont été renvoyés par le serveur. Si un cookie était renvoyé, un champ "set-cookie" contenant la valeur du cookie s'afficherait. Nous voulons profiter de cette valeur et le mettre dans l'en-tête HTTP sortant pour nos demandes suivantes:

 
headers['Cookie'] = response['set-cookie'] 

Maintenant, nous pouvons envoyer une demande à l'aide de cette tête et il contiendra le cookie, de sorte que le serveur peut nous reconnaître.

Alors ... voici le tout dans un script. Nous se connecter à un site, puis faire une autre demande en utilisant le cookie que nous avons reçu:

 
#!/usr/bin/env python 

import urllib 
import httplib2 

http = httplib2.Http() 

url = 'http://www.example.com/login' 
body = {'USERNAME': 'foo', 'PASSWORD': 'bar'} 
headers = {'Content-type': 'application/x-www-form-urlencoded'} 
response, content = http.request(url, 'POST', headers=headers, body=urllib.urlencode(body)) 

headers = {'Cookie': response['set-cookie']} 

url = 'http://www.example.com/home' 
response, content = http.request(url, 'GET', headers=headers) 
0

Vous pouvez également utiliser juste urllib2 bibliothèque

 import urllib2 

     opener = urllib2.build_opener() 
     opener.addheaders.append(('Cookie', 'cookie1=value1;cookie2=value2')) 
     f = opener.open("http://www.example.com/") 
     the_page_html = f.read()