在Python3中,如何正确处理带有cookie处理的站点请求?

3 投票
1 回答
1489 浏览
提问于 2025-04-16 07:09

我正在写一个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

我之前遇到过这个问题。我无法让cookie管理自动工作,这让我烦恼了好几天。最后,我只好手动处理cookie。也就是说,我从响应头中获取'设置cookie'的内容,然后把它安全地保存起来。之后,每次向那个服务器发送请求时,我都会把之前得到的cookie值放进请求头里。

撰写回答