Curl POST请求在Postman中工作,但在Python请求中不工作(200响应,带机器人检测)

Curl POST请求在Postman中工作,但在Python请求中不工作(200响应,带机器人检测),curl,web-scraping,python-requests,postman,incapsula,Curl,Web Scraping,Python Requests,Postman,Incapsula,我有一个POST请求,它可以完美地与Postman和cURL一起工作(它返回一个JSON数据块)。但是,当我使用Python的Requests库执行完全相同的请求时,我得到了一个200成功响应,但我得到的不是JSON blob,而是: <html> <head> <META NAME="robots" CONTENT="noindex,nofollow"> <script src="/_Incapsula_Resource?SWJIYLWA=5074a7

我有一个POST请求,它可以完美地与Postman和cURL一起工作(它返回一个JSON数据块)。但是,当我使用Python的Requests库执行完全相同的请求时,我得到了一个200成功响应,但我得到的不是JSON blob,而是:

<html>
<head>
<META NAME="robots" CONTENT="noindex,nofollow">
<script src="/_Incapsula_Resource?SWJIYLWA=5074a744e2e3d891814e9a2dace20bd4,719d34d31c8e3a6e6fffd425f7e032f3">
</script>
<body>
</body></html>
…下面是我的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)

我已经验证了有效负载和标头是正确和有效的。任何帮助都将不胜感激;谢谢

我有一个类似的问题,我可以通过在请求中发送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库获取cookie。

您将获得200个成功响应,但响应中没有JSON数据。
这意味着它只是一个响应对象。它只包含响应代码
要从响应中提取blob信息,请将响应对象转换为json
只需
json\u resp=response\u raw.json()


json\u resp
包含您的实际响应详细信息。

尝试打开调试并检查发出的实际请求<代码>从http.client导入HTTPConnection;HTTPConnection.debuglevel=1什么是url,如果可以访问,您可以共享…您的
邮差令牌在哪里:2488e914-531e-4ac7-ae8d-8490b2242396
(python代码)?您在
curl
中有它,但在python中没有。@Matej是由Postman自动添加的--我从配置中删除了它,它仍然可以正常工作。我更新了我原来的问题,指出Postman和Python请求的HTTP请求都是相同的,这是通过HTTP请求bin接收到的内容来衡量的:)@Matej是的,响应代码是相同的,但实际响应是不同的。Curl返回json数据,而Python返回HTML,声明Incapsula阻止了请求。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-@Kvam这是有效的答案。如果在评论中加上这一点,对于那些落在这里的人来说,这一点可能会被忽略。我建议你把问题读清楚,看看作者期望的解决方案是什么。
...
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)