我正在使用以下代码与网站互动:
session = requests.session()
get = session.get(LANDING_URL, headers=HEADERS)
post = session.post(LANDING_URL, headers=HEADERS, data=PARAMS)
我正在使用session
对象在两次调用之间保留cookie,但是get请求之后的post请求似乎未使用会话cookie。以下输出来自pdb
:
(Pdb) get.cookies
<RequestsCookieJar[Cookie(version=0, name='ASP.NET_SessionId', value=...)]>
(Pdb) post.cookies
<RequestsCookieJar[]>
(Pdb) session.cookies
<RequestsCookieJar[Cookie(version=0, name='ASP.NET_SessionId', value=...)]>
这是否意味着发布请求未使用会话Cookie?如果是这样,为什么不呢?
答案 0 :(得分:1)
页面可能使用JavaScript添加Cookie,并且请求无法运行JavaScript。
使用get.cookies
,post.cookies
仅显示从服务器发送的cookie,而不显示向服务器发送的cookie。
session
应该保留先前请求中的所有cookie,并在POST请求中发送它们。
您可以使用httpbin.org。如果您将GET请求发送到httpbin.org/get或将POST请求发送到httpbin.org/post,则它会将所有标头,数据,cookie等发送回给您(作为JSON)。httpbin.org上还有其他有用的功能< / p>
您还可以安装Charles或Man-In-The-Middle-Py之类的本地代理服务器,并通过代理发送请求。您将在代理中看到正文和标头。您可以将代理与Web浏览器和脚本一起使用,以将您的请求与浏览器的请求进行比较。
您还可以选中post.request.body
,post.request.headers
。我从未使用过它,但应该将正文和标头发送到服务器。