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

Posted

技术标签:

【中文标题】使用 Python 请求:会话、Cookie 和 POST【英文标题】:Using Python Requests: Sessions, Cookies, and POST 【发布时间】:2013-03-24 14:16:24 【问题描述】:

我正在尝试使用StubHub API 抓取一些销售数据。此处显示此数据的示例:

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

您会注意到,如果您尝试在不登录 stubhub.com 的情况下访问该网址,它将无法正常工作。 You will need to login first.

通过网络浏览器登录后,我会在新选项卡中打开要抓取的 URL,然后使用以下命令检索抓取的数据:

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 库文档对于以前从未做过此类事情的人来说非常糟糕,所以我希望你们能提供帮助。

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?

【问题讨论】:

如果您有删除内容的法律义务,请标记为适度关注并清楚说明情况,我们将采取适当的措施。请不要只编辑问题的正文。 这就是我了解 stubhub.com 的方式 相关:***.com/questions/38122379/… 【参考方案1】:

我不知道 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

【讨论】:

你能帮帮我吗?我尝试以这种方式登录网站,但它无法正常工作。 @MD.KhairulBasar 也许您可以提出另一个问题,提供交易信息并将其链接到评论中? 虽然我已经得到了答案,但我还是在这里链接了我的question,因为它可能对其他人有所帮助。 进一步的发布请求似乎不起作用。之后应该只获取请求吗? @kcorlidy 实际上,如果您知道可接受的重定向数量,您可以设置一个特定的限制,例如:s.max_redirects = 3 其中s 是一个会话对象。

以上是关于使用 Python 请求:会话、Cookie 和 POST的主要内容,如果未能解决你的问题,请参考以下文章

Python请求未接收Cookie

python Cookie Session 相关用法

python requests模块session的使用建议及整个会话中的所有cookie的方法

Python模块-requests

Cookie和Session

每个请求使用不同的 cookie 域进行快速会话?