python - postman、curl 和 wget 工作时无法通过 python 请求获取 cookie
问题描述
我正在尝试在法国供水商网站上进行身份验证以获取我的用水量数据。该网站不提供任何 api,我正在尝试制作一个在网站上进行身份验证并抓取数据的 python 脚本。我的工作基于一个有效的 Domoticz python脚本和一个shell 脚本。工作流程如下:
- 从网站获取令牌
- 在步骤 1 使用登录名、密码和令牌进行身份验证
- 从第 2 步获取 1 个或多个 cookie
- 使用来自 3 的 cookie 获取数据
我被困在第 2 步,无法使用我的 python 脚本获取 cookie。我尝试使用邮递员、curl 和 wget,它正在工作。我什至使用了邮递员生成的 python 代码,但我仍然没有得到任何 cookie。
这是我的邮递员post
请求
的屏幕截图,
它在响应中提供了两个 cookie。
这是我的python代码:
import requests
url = "https://www.toutsurmoneau.fr/mon-compte-en-ligne/je-me-connecte"
querystring = {"_username":"mymail@gmail.com","_password":"mypass","_csrf_token":"knfOIFZNhiCVxHS0U84GW5CrfMt36eLvqPPYGDSsOww","signin[username]":"mymail@gmail.com","signin[password]":"mypass","tsme_user_login[_username]":"mymail@gmail.com","tsme_user_login[_password]":"mypass"}
payload = ""
headers = {
'Accept': "application/json, text/javascript, */*; q=0.01",
'Content-Type': "application/x-www-form-urlencoded",
'Accept-Language': "fr,fr-FR;q=0.8,en;q=0.6",
'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Mobile Safari/537.36",
'Connection': "keep-alive",
'cache-control': "no-cache",
'Postman-Token': "c7e5f7ca-abea-4161-999a-3c28ec979628"
}
response = requests.request("POST", url, data=payload, headers=headers, params=querystring)
print(response.cookies.get_dict())
输出是{}
。
我无法弄清楚我做错了什么。如果您有任何帮助,我将很高兴得到它。
谢谢阅读。
编辑:
我的一些假设是错误的。shell 脚本确实在工作,但不是 Postman。由于收到的回复 200,我感到很困惑。
解决方案
所以我回答我自己的问题。
首先,在第 1 步获取令牌时,我收到一个 cookie。我应该在登录时使用这个 cookie,而我以前没有这样做过。
然后,当使用此 cookie 和令牌登录步骤 2 时,我无法在连接良好时收到的响应中看到任何 cookie(我在内容中找到一个“断开连接”字符串,只有在良好连接时才会出现登录)。这是正常行为,因为 cookie 不会在发布请求的响应中发送。
我必须创建一个requests.session
来发布我的登录表单,并且会话存储 cookie。
现在,我可以使用这些信息从服务器获取数据。希望这会帮助别人。
推荐阅读
- apache-flink - 在flink processFunction中,所有mapstate在onTimer()函数中都是空的
- javascript - Javascript预先选择的选择选项不显示隐藏值
- flutter - zsh:找不到命令:为 MacOS 创建新文件夹时颤动
- python - 使用python在mysql中进行图像编码和解码
- scikit-learn - RandomizedSearchCV 无替换抽样
- html - 如何将文本块的高度自动调整为 HTML 旁边的图像
- node.js - 困惑NodeJs可执行文件的大小只有32MB左右
- php - AWS Elastic Bean Codigniter 404 问题与除默认控制器之外的所有控制器
- javascript - 无法解析“/path/to/myapp/src”中的“video-react”
- r - 如何使用线性回归预测特定的行和列