woo*_*ick 5 curl web-scraping python-requests incapsula postman
我有一个POST请求,可以与两个Postman和cURL完美配合(它返回数据的JSON Blob)。但是,当我使用Python的Requests库执行完全相同的请求时,会收到200成功响应,但得到的不是我的JSON Blob:
<html>
<head>
<META NAME="robots" CONTENT="noindex,nofollow">
<script src="/_Incapsula_Resource?SWJIYLWA=5074a744e2e3d891814e9a2dace20bd4,719d34d31c8e3a6e6fffd425f7e032f3">
</script>
<body>
</body></html>
Run Code Online (Sandbox Code Playgroud)
我已经使用HTTP请求容器来验证Postman / cURL的请求与Python Requests的请求完全相同。
这是我在cURL中的邮递员请求:
curl -X POST \
https:/someurl/bla/bla \
-H 'Content-Type: application/json' \
-H 'Postman-Token: 2488e914-531e-4ac7-ae8d-8490b2242396' \
-H 'Referer: https://www.host.com/bla/bla/' \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:65.0) Gecko/20100101 Firefox/65.0' \
-H 'cache-control: no-cache' \
-d '{"json1":"blabla","etc":"etc"}'
Run Code Online (Sandbox Code Playgroud)
...这是我的Python代码:
payload = {
"json1": "blabla",
"etc": "etc",
}
headers = {
'Host': 'www.host.com',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate, br',
'Referer': 'https://www.host.com/bla/bla/',
'Content-Type':'application/json',
'X-Requested-With': 'XMLHttpRequest',
'Connection': 'keep-alive',
'Origin': 'https://www.host.com',
}
s = requests.Session()
response_raw = s.post(url, json=payload, headers=headers)
print(response_raw)
print(response_raw.text)
Run Code Online (Sandbox Code Playgroud)
我已经验证了有效载荷和标头是正确和有效的。任何帮助将非常感激; 谢谢!
我遇到了类似的问题,我可以通过在请求中发送 cookie 来解决。尝试这个:
...
my_cookie = {"Cookie": "cookie text..."}
s = requests.Session()
response_raw = s.post(url, json=payload, headers=headers, cookies=my_cookie)
print(response_raw)
print(response_raw.text)
print(response_raw.content)
Run Code Online (Sandbox Code Playgroud)
您可以从浏览器开发工具控制台的“请求标头”部分的“网络”选项卡获取 cookie。听起来您也许还可以使用 Python 的 CookieJar 库获取 cookie。