【问题标题】:Python post method with requests带有请求的 Python post 方法
【发布时间】:2017-03-07 13:57:43
【问题描述】:

我正在尝试使用 Python 3 中的请求登录网站。 很遗憾,我做不到。

这是我从登录请求中获得的信息:

响应标头:

Cache-Control:no-cache
Connection:close
Content-Encoding:gzip
Content-Type:application/json

请求标头:

Accept:application/json, text/plain, */*
Content-Type:application/json;charset=UTF-8
Referer:fffff

请求负载:

{email: "xxx", password: "yyy", _token: "zzz"}

我的代码:

with requests.Session() as x:
    url = 'website'
    USERNAME = "xxx"
    PASSWORD = "yyy"
    token = "zzz"
    x.get(url)
    x.post(url, data={'email': USERNAME, 'password': PASSWORD, '_token':token},
           headers={'Referer':"fffff"})
    page = x.get("some_page_I_have_access_after_login")
    print(page.content)

最后一次“打印”的唯一结果是“请登录到....”

你能帮帮我吗?

编辑:

我已将代码更改为:

url = 'url'
USERNAME = "xxx"
PASSWORD = "yyy"
token = "fff"
headers = {'Content-type': 'application/json', 'Accept': 'text/plain', 'Referer':'cccc'}
data = {'email': USERNAME, 'password': PASSWORD, '_token':token}
x = requests.get(url)
w = requests.post(url, data=data, headers=headers)
print(w.status_code)
page = requests.get("some_url_I_want_access")
page.raise_for_status()

现在我有明确的状态。 对于 w(登录操作),我的状态为 200。 还有一个问题,因为当我更改了用户名后,我仍然得到 200,这意味着我无法登录。

对于我得到的页面:401 Client Error: Unauthorized for url: "some_url_I_want_access"

【问题讨论】:

  • 您确定可以使用 JSON 发送凭据吗?通常使用表单编码发送。
  • 我不知道,但奇怪的是我已将行 x.post(....) 更改为 w = x.post(...) 并添加行 print( w.content) 在下一行。看来我已经登录了,因为我得到了 my_page 的 html。不幸的是,最后一个“打印”语句仍然出现同样的错误。
  • 好的,我已经取得了进展。我想我知道错误在哪里。当我运行我的程序时,请求正文是:email=aaa%40ccc.com&_token=xxx&password=yyy 但是当我检查工作浏览器请求时,请求正文是:{"email":"aaa@ccc.com","password" :"yyy","_token":"xxx"} 这不完全相同,当我从工作请求中复制粘贴这一行并将其粘贴到 Web 调试器中时,我的 python 请求有效。我只需要以正确的方式用 Python 编写这一整行。这对我来说可能很难。

标签: python post request


【解决方案1】:

试试这个:

import json
w = requests.post(url, data=json.dumps(data), headers=headers)

【讨论】:

  • 没错。这就是问题所在。前段时间我设法通过一些文档帮助解决了这个问题,但非常感谢你的帮助 Andrey。
猜你喜欢
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多