POST请求在Postman中有效,但在Python Requests中无效(带有机器人检测功能的200个响应)

时间:2019-02-26 05:08:42

标签: curl web-scraping python-requests postman incapsula

我有一个POST请求,可以与两个Postman和cURL完美配合(它返回一个JSON Blob数据)。但是,当我使用Python的Requests库执行完全相同的请求时,会收到200成功响应,但是得到的不是我的JSON Blob:

select a.*,b.*,c.* from tableA a left join tableB b on a.column2=b.column1
            left join tableC c on a.column2=c.column3

我已经使用HTTP请求容器来验证Postman / cURL的请求与Python请求中的请求完全相同。

这是我在cURL中的邮递员请求:

<html>
<head>
<META NAME="robots" CONTENT="noindex,nofollow">
<script src="/_Incapsula_Resource?SWJIYLWA=5074a744e2e3d891814e9a2dace20bd4,719d34d31c8e3a6e6fffd425f7e032f3">
</script>
<body>
</body></html>

...这是我的Python代码:

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"}'

我已经验证了有效载荷和标头是正确和有效的。任何帮助将非常感激;谢谢!

2 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,可以通过在请求中发送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)

您可以从浏览器的“开发工具”控制台中“请求标题”部分的“网络”选项卡中获取Cookie。听起来您也许还可以使用Python的CookieJar lib获取cookie。

答案 1 :(得分:0)

尝试将验证选项传递为 false。

<块引用>

requests.get('https://example.com', verify=False)