当前位置: 首页 > 知识库问答 >
问题:

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

明宜年
2023-03-14

我有一个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>

我已经使用HTTP请求箱来验证来自Postman/cURL的请求是否与来自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"}'

...这是我的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)

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

共有3个答案

茹建茗
2023-03-14

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

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

赵高雅
2023-03-14

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

宇文弘懿
2023-03-14

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

 类似资料:
  • 我有一个python代码,用来创建一个json文件,作为post请求中的数据。 变量如下所示: 当我打印上述变量时,我得到以下输出: 当我在我的邮递员请求上使用以下输出时,它会像我期望的那样工作。但是当我使用相同的变量发送带有以下函数的超文本传输协议请求时,我得到了一个错误。 为什么我的输出在postman上工作,而不是在python本身?

  • 我正在尝试调用Workday招聘网络服务的Put_Background_Check操作。我已经在SoapUI中打开了WSDL文件,并成功地发送了以下XML。。。 我得到以下回应。。。 问题是,当我试图在Postman(或cURL或Python请求)中用相同的标题重新创建相同的POST请求时,我会得到无效的用户名或密码错误。SoapUI在这里做什么特别的事情吗?本案的回应如下...

  • 我将GET请求发送到具有相同标头的相同endpoint,包括承载,但当我从Postman调用时得到200和正确的JSON,当我在我的(Vue)项目中使用Axios发送请求时,我得到302。 运行在localhost:8080(如果有用)上的本地项目的调用如下: 而在《邮递员》中,我所做的就是用相同的url创建一个GET请求,我在标题中添加的只是“承载者…” 我从axios得到的错误是: 响应状态是

  • 不确定是否“内容安全策略:页面的设置阻止了在https://localhost:5000/favicon.ico(”default-src“)加载资源。”会影响。我试图使用network选项卡查看此请求,但我收到了这条消息。 它还使用Swagger UI工作:https://Swagger.io/tools/swagger-ui/

  • 请求在Postman/Java中失败,但在RESTClient中工作…以下是请求,并附上错误的截图。 这是一个POST请求 {“username”:“test”,“password”:“test”,“simulate_user”:“test”,“sourcetabledesc”:“testlist100”,“联系人”:[{“组织”:“ckt”,“workphone”:“12315423”,“fir

  • 我正在这样做: 但是请求在服务器上不起作用。。。在服务器上,我应该看到发送的数据,但我看不到它们 我也试过这个: 而且它是有效的。。。有什么问题吗?