2010-11-20 21 views
1

Possible en double:
How do you send a HEAD HTTP request in Python?Récupération uniquement en-tête HTTP sans que le contenu en Python

J'utilise le urllib de Python et urllib2 pour faire une connexion automatique. J'utilise aussi HTTPCookieProcessor pour automatiser le traitement des cookies. Le code est un peu comme ceci:

o = urllib2.build_opener(urllib2.HTTPCookieProcessor()) 
# assuming the site expects 'user' and 'pass' as query params 
p = urllib.urlencode({ 'username': 'me', 'password': 'mypass' }) 
# perform login with params 
f = o.open('http://www.mysite.com/login/', p) 
data = f.read() 
f.close() 
# second request 
t = o.open('http://www.mysite.com/protected/area/') 
data = t.read() 
t.close() 

Maintenant, le point est que je ne veux pas perdre la bande passante en téléchargement le contenu de http://www.mysite.com/login/, puisque tout ce que je veux faire est de recevoir les cookies (qui sont là en les en-têtes). En outre, le site me redirige vers http://www.mysite.com/userprofile lors de ma première connexion (c'est-à-dire, le f.geturl() = http://www.mysite.com/userprofile).

Alors est-il possible que je puisse éviter d'aller chercher le contenu dans la première requête?

P.S. S'il vous plaît ne me demandez pas pourquoi je évite l'utilisation du petit réseau de transférer le contenu. Bien que le contenu soit petit, je ne veux toujours pas le télécharger.

Répondre

0

Il suffit d'envoyer un HEAD demande instad d'une demande GET. Vous pouvez utiliser le httplib de Python pour le faire.

Quelque chose comme ceci:

import httplib, urllib 
    creds = urllib.urlencode({ 'username': 'me', 'password': 'mypass' }); 
    connection = httplib.HTTPConnection("www.mysite.com") 
    connection.request("HEAD", "/login/", creds) 
    response = connection.getresponse() 
    print response.getheaders() 
+0

Mais alors, je perdrais la facilité de HTTPCookieProcessor, non? – siddhant3s

+0

@ siddhan3s Plutôt que de répondre à quelque chose qui a déjà été répondu, voir cette réponse http://stackoverflow.com/questions/107405/how-do-you-send-a-head-http-request-in-python/2070916#2070916 Vous pouvez aussi utiliser urllib2 pour faire des requêtes HEAD. – Alex