使用 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的主要内容,如果未能解决你的问题,请参考以下文章