邮递员,curl和wget工作时无法通过python请求获取cookie

时间:2019-04-19 21:10:25

标签: python cookies python-requests

我正尝试在法国水供应商的网站上进行身份验证,以获取用水量数据。该网站未提供任何api,我正在尝试制作一个可在该网站上进行身份验证并抓取数据的python脚本。我的工作基于working Domoticz python脚本和shell script。 工作流程如下:

  1. 从网站获取令牌
  2. 使用登录名,密码和令牌进行身份验证,进入步骤1
  3. 从第2步中获取1个或多个Cookie
  4. 使用3中的cookie获取数据

我被困在第2步,在那里我的python脚本无法获取cookie。我尝试了邮递员,curl和wget,它正在工作。我什至使用邮递员生成的python代码,但仍然没有得到Cookie。

这是我的邮递员post请求的屏幕截图 enter image description here 会在响应中提供两个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 个答案:

答案 0 :(得分:0)

所以我回答我自己的问题。

首先,在第1步获取令牌时,我收到一个cookie。我应该在登录之前从未使用过的Cookie。

然后,当使用此Cookie和令牌登录第2步时,我在连接良好的情况下无法在收到的响应中看到任何cookie(我在内容中找到一个“ disconnect”字符串,该字符串位于此处仅在登录正确的情况下)。这是正常现象,因为Cookie不会在发布请求的响应中发送。

我必须创建一个requests.session才能发布我的登录表单,并且该会话存储cookie。

现在,我可以使用此信息来从服务器获取数据。 希望对别人有帮助。