Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python urllib2在http头中传递会话cookie?_Python_Http_Cookies_Wikipedia Api - Fatal编程技术网

使用python urllib2在http头中传递会话cookie?

使用python urllib2在http头中传递会话cookie?,python,http,cookies,wikipedia-api,Python,Http,Cookies,Wikipedia Api,我正在尝试编写一个简单的脚本,使用Mediawiki api登录到Wikipedia并在我的用户页面上执行一些操作。然而,我似乎从未通过第一次登录请求(从这个页面:)。我认为没有发送我设置的会话cookie。这是我目前的代码: import Cookie, urllib, urllib2, xml.etree.ElementTree url = 'https://en.wikipedia.org/w/api.php?action=login&format=xml' username =

我正在尝试编写一个简单的脚本,使用Mediawiki api登录到Wikipedia并在我的用户页面上执行一些操作。然而,我似乎从未通过第一次登录请求(从这个页面:)。我认为没有发送我设置的会话cookie。这是我目前的代码:

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()
我认为问题出在
请求的某个地方。添加\u头('Set-Cookie',session\u Cookie\u头)
行,但我不确定。如何使用这些python库在每个请求的标题中发送Cookie(这对于许多API函数来说都是必需的)。

最新版本的支持(并且非常简单易用,通常非常棒):


我同意。这容易多了。非常感谢。
with requests.session() as s: 
    s.post(url, data=user_data)
    r = s.get(url_2)