2011-08-23 16 views
7

Wikipedia'da oturum açmak ve kullanıcı sayfamda Mediawiki API'yı kullanarak bazı işlemler gerçekleştirmek için basit bir komut dosyası yazmaya çalışıyorum. Ancak, ilk giriş isteğini asla geçemedim (bu sayfadan: https://en.wikipedia.org/wiki/Wikipedia:Creating_a_bot#Logging_in). Ayarladığım oturum çerezinin gönderilmediğini sanmıyorum. Sorunun bir yere request.add_header('Set-Cookie', session_cookie_header) çizgide olduğunu düşünüyorum, ama emin bilmiyorumoturum çerezlerini python urllib2 ile http başlığında geçirin?

import Cookie, urllib, urllib2, xml.etree.ElementTree 

url = 'https://en.wikipedia.org/w/api.php?action=login&format=xml' 
username = 'user' 
password = 'password' 

user_data = [('lgname', username), ('lgpassword', password)] 

#Login step 1 
#Make the POST request 
request = urllib2.Request(url) 
data = urllib.urlencode(user_data) 
login_raw_data1 = urllib2.urlopen(request, data).read() 

#Parse the XML for the login information 
login_data1 = xml.etree.ElementTree.fromstring(login_raw_data1) 
login_tag = login_data1.find('login') 
token = login_tag.attrib['token'] 
cookieprefix = login_tag.attrib['cookieprefix'] 
sessionid = login_tag.attrib['sessionid'] 

#Set the cookies 
cookie = Cookie.SimpleCookie() 
cookie[cookieprefix + '_session'] = sessionid 

#Login step 2 
request = urllib2.Request(url) 
session_cookie_header = cookieprefix+'_session='+sessionid+'; path=/; domain=.wikipedia.org; HttpOnly' 

request.add_header('Set-Cookie', session_cookie_header) 
user_data.append(('lgtoken', token)) 
data = urllib.urlencode(user_data) 

login_raw_data2 = urllib2.urlopen(request, data).read() 

: Bu benim defa kodudur. Bu python kitaplıklarını, her istekte (birçok API işlevi için gerekli olan) başlıkta çerezler göndermek için nasıl kullanırım.

cevap

14

requests son sürümü sessions için destek (yanı sıra kullanımı çok basit ve genellikle büyük bir olmak üzere) vardır:

with requests.session() as s: 
    s.post(url, data=user_data) 
    r = s.get(url_2) 
+0

ben böyle devam edeceğiz. Bu çok daha kolay. Teşekkür ederim! –

İlgili konular