【发布时间】: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