我正在尝试模拟请求 有各种标题和括号表单数据。
表格数据:
{"username": "MY_USERNAME", "pass": "MY_PASS", "AUTO": "true"}
这是Chrome控制台中显示的表单数据
所以我尝试将它与Python的requests
库结合在一起:
import requests
reqUrl = 'http://website.com/login'
postHeaders = {
'Accept': '*/*',
'Accept-Encoding': 'gzip,deflate',
'Accept-Language': 'en-US,en;q=0.8',
'Connection': 'keep-alive',
'Content-Length': '68',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Host': 'website.com',
'Origin': 'http://www.website.com',
'Referer': 'http://www.website.com/',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/37.0.2062.120 Chrome/37.0.2062.120 Safari/537.36'
}
payload = {"username": "MY_USERNAME",
"pass": "MY_PASS",
"AUTO": "true"
}
session = requests.Session()
response = session.post(reqUrl, data=payload, headers=postHeaders)
我收到了回复,但显示:
{"status":"failure","error":"Invalid request data"}
我是否正在实施表单数据错误?我还在想它可能与修改Content-Length
?
答案 0 :(得分:1)
是的,您正在设置内容长度,覆盖requests
可能设置的任何内容。您设置了太多标题,而是将大部分标题保留在库中:
postHeaders = {
'Accept-Language': 'en-US,en;q=0.8',
'Origin': 'http://www.website.com',
'Referer': 'http://www.website.com/',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/37.0.2062.120 Chrome/37.0.2062.120 Safari/537.36'
}
很多。所有其他人都将为您生成。
但是,根据您对表单数据的描述,看起来您正在发布JSON。在这种情况下,请使用json
关键字参数而不是data
,它会将您的有效负载编码为JSON,并将Content-Type
标头设置为application/json
:
response = session.post(reqUrl, json=payload, headers=postHeaders)