【问题标题】:Python requests POST returns 400 instead 200Python 请求 POST 返回 400 而不是 200
【发布时间】:2018-05-23 12:16:25
【问题描述】:

我期待 200 尽管 400 得到返回。

有人看到我在请求中做错了什么吗?

代码:

import   requests
import   json
import   lxml.html
from     lxml.cssselect   import   CSSSelector
from     lxml.etree       import   fromstring

SELECTOR  = CSSSelector('[type=hidden]')
BASE_URL  = 'https://www.bonuscard.ch/myos/en/login'
LOGIN_URL = BASE_URL+'1.IFormSubmitListener-homePanel-loginPanel-loginForm'
# headers copied from chromium (returns 200)
headers   = {
        "Accept"                    : "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "Accept-Encoding"           : "gzip, deflate, br",
        "Accept-Language"           : "en,de;q=0.9",
        "Cache-Control"             : "no-cache",
        "Connection"                : "keep-alive",
        "Content-Length"            : "151",
        "Content-Type"              : "application/x-www-form-urlencoded",
        "DNT"                       : "1",
        "Host"                      : "www.bonuscard.ch",
        "Origin"                    : "https: //www.bonuscard.ch",
        "Pragma"                    : "no-cache",
        "Referer"                   : "https: //www.bonuscard.ch/myos/en/login",
        "Upgrade-Insecure-Requests" : "1",
        "User-Agent"                : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
        }
with requests.Session() as session:
    response = session.get(BASE_URL)
    tree = lxml.html.fromstring(response.content)
    keyOnly_token = [e.get('id') for e in SELECTOR(tree)][0]
    payload = {
            keyOnly_token:"",
            "userName-border:userName-border_body:userName ": "jon@doe.com",
            "password-border:password-border_body:password ": "123",
            "login                                         ": ""
            }
    response = session.post(LOGIN_URL,headers=headers,data=payload)
    # Returns 400
    print(response)

这些变化也没有任何区别:

  • POST 没有headers
  • POST 使用 json=payload 而不是 data=payload

【问题讨论】:

  • curl 请求是否产生相同的400 输出?
  • @IvanVinogradov curl 返回200(从 chromium 复制 POST 请求“复制为 curl”并通过邮递员请求)
  • 您能否将此curl 请求添加到问题中

标签: python-requests


【解决方案1】:

感谢 Ivan 的指导,我找到了这个 curlrequests 的转换器,这是解决方案 https://curl.trillworks.com/#

【讨论】:

    猜你喜欢
    • 2020-07-30
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 2020-11-12
    相关资源
    最近更新 更多