使用Python请求:会话,Cookie和POST

时间:2013-04-03 03:43:55

标签: python python-3.x python-requests session-cookies

我正试图使用​​StubHub API来搜集一些销售数据。这里看到的数据示例如下:

https://sell.stubhub.com/sellapi/event/4236070/section/null/seatmapdata

您会注意到,如果您尝试访问该网址而不登录stubhub.com,则无法使用。 You will need to login first

我通过网络浏览器登录后,打开要在新标签中抓取的网址,然后使用以下命令检索已删除的数据:

r = requests.get('https://sell.stubhub.com/sellapi/event/4236070/section/null/seatmapdata')

但是,一旦浏览器会话在十分钟后过期,我就会收到此错误:

<FormErrors>
<FormField>User Auth Check</FormField>
<ErrorMessage>
Either is not active or the session might have expired. Please login again.
</ErrorMessage>

我认为我需要通过cookie实现会话ID,以使我的身份验证保持良好状态。

对于之前从未做过这类事情的人来说,Requests库文档非常糟糕,所以我希望大家可以提供帮助。

请求提供的示例是:

s = requests.Session()

s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")

print r.text
# '{"cookies": {"sessioncookie": "123456789"}}'

老实说,我无法做出正面或反面。如何在POST请求之间保留cookie?

1 个答案:

答案 0 :(得分:51)

我不知道stubhub的api是如何工作的,但通常看起来应该是这样的:

s = requests.Session()
data = {"login":"my_login", "password":"my_password"}
url = "http://example.net/login"
r = s.post(url, data=data)

现在您的会话包含登录表单提供的cookie。要访问此会话的cookie,只需使用

s.cookies

任何其他请求的进一步操作都会有此cookie