Python, urllib2 e cookies

por Walter Cruz on 14/12/2006
in Python, Google, Linguagens

Essa semana precisei fazer reconhecer os cookies recebidos de um servidor, usando python.

Para conexões http no python, uso a urllib2. Após algumas pesquisas, encontrei o módulo necessário: é o cookielib. Segue um código que faz um acesso em google.com e traz os cookies, comentado.


#-*- encoding: iso8859-1 -*-
import urllib2
#biblioteca para requisições http
import cookielib
#biblioteca para tratar de cookies

cj = cookielib.CookieJar()
#Uma nova instância de um CookieJar. É onde guardaremos os cookis

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
#O método build_opener facilita algumas coisas. Estamos instalando um handler - um manipulador de cookies, o nosso cj.
urllib2.install_opener(opener)
#Podemos usar diversos openers. Com o install_opener, colocamos o nosso opener como o default

theurl = 'http://google.com'
txdata = None
txheaders =  {'User-agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}
#Vamos brincar de ser o IE 5.5

try:
    req = urllib2.Request(theurl, txdata, txheaders)
    #criação da requisição
    handle = urllib2.urlopen(req)
    #A requisição própriamente dita
except IOError, e:
    print 'Falha em abrir a URL "%s".' % theurl
    if hasattr(e, 'code'):
        print 'Código do erro - %s.' % e.code
else:
    print 'Here are the headers of the page :'
    #os cabeçalhos da página
    print handle.info()

print 'Cookies recebidos:'
for index, cookie in enumerate(cj):
    print index, '  :  ', cookie  
 

Faça um teste eliminando o manipulador de cookies substituindo a linha


opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
 

por:


opener = urllib2.build_opener()
 

Você verá que mesmo o servidor enviando um cabeçalho Set-Cookie, não temos onde receber.