在Python3中使用cookie处理程序处理站点请求的正确方法是什么?

时间:2010-11-16 12:44:51

标签: python httpwebrequest python-3.x urllib

我正在编写Python 3.1.2中的脚本,该脚本登录到站点然后开始发出请求。我可以毫无困难地登录,但在这之后,请求会返回一个错误,说明我还没有登录。我的代码看起来像这样:

import urllib.request
from http import cookiejar
from urllib.parse import urlencode

jar = cookiejar.CookieJar()

credentials = {'accountName': 'username', 'password': 'unenc_pw'}
credenc = urlencode(credentials)

opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(jar))
urllib.request.install_opener(opener)
req = opener.open('http://www.wowarmory.com/?app=armory?login&cr=true', credenc)
test = opener.open('http://www.wowarmory.com/auctionhouse/search.json')
print(req.read())

print(test.read())

对第一个请求的响应是我希望在登录时获得的页面。

对第二个的回应是:

b'{"error":{"code":10005,"error":true,"message":"You must log in."},"command":{"sort":"RARITY","reverse":false,"pageSize":20,"end":20,"start":0,"minLvl":0,"maxLvl":0,"id":0,"qual":0,"classId":-1,"filterId":"-1"}}'

我是否缺少使用我对成功进行身份验证以获取未来请求的任何Cookie信息?

1 个答案:

答案 0 :(得分:0)

我曾经遇到过这个问题。我无法让cookie管理自动运行cookie。让我感到沮丧的几天,我最终手动处理了cookie。这是从响应头获取'Set-Cookie'的内容,将其保存在安全的地方。随后,对该服务器发出的任何请求,我都会将'Cookie'设置为请求标头,其中包含我之前获得的值。