繁体   English   中英

Python requests.post()返回None

[英]Python requests.post() returns None

我知道之前讨论过这个问题,但我找不到适合我用例的工作解决方案。

我们有一个返回数据的内部服务器(抱歉,没有可用的外部地址)。 在端点上调用POST方法将返回JSON。 我尝试使用Postman工具发布帖子来检查是否收到了有效的回复。 使用邮递员时,我按预期收到回复。 不需要身份验证。

但是,Python客户端无法返回数据并收到空响应。

代码段:

import json
import requests

URL_PATH = "https://our.internal.server.rest.address"
HEADERS = {
    'Content-Type': 'application/json'
}

DATA = '''{
    "method"  : "object.read",
    "params"  : "",
    "id"      : 142
}'''

S = requests.session()
R = S.post(URL_PATH, headers=HEADERS, json=DATA)

if R.ok:
    print("Type: ", R.headers["Content-Type"])
    print("Text: ", str(R.text))
    print("JSON: ", R.json())
    print("Content", R.content)
else:
    R.raise_for_status()

S.close()

输出是:

输入:application / json
文字:null
JSON:没有
内容b'null'

我知道我的Python代码出错了,为什么没有返回数据,但是在使用单独的工具时呢?

我也尝试在post()中使用data =:

S.post(URL_PATH, headers=HEADERS, data=json.dumps(DATA))

或直接使用requests.post()跳过Session()。

1)尝试使用不同端点的相同代码。

这意味着Postman中发送的确切参数不会添加到客户端中。

尝试使用Apache tcpmon https://ws.apache.org/tcpmon/来监听来自post man和python客户端的请求。

这将帮助您识别缺少的参数。

我相信你的DATA变量应该是一个字典而不是一个字符串?

感谢大家的快速支持。 这是最终版本,效果很好!

import json
import requests

URL_PATH = "https://our.internal.server.rest.address"
HEADERS = {
    'Content-Type': 'application/json'
}

DATA = {
    "method"  : "object.read",
    "params"  : "",
    "id"      : 142
}

# R = requests.request("POST", URL_PATH, data=payload, headers=HEADERS)  # suggested by Postman
R = requests.post(URL_PATH, json=DATA, headers=HEADERS)

if R.ok:
    print("JSON: ", R.json())
else:
    R.raise_for_status()

我得到了同样的问题得到了回应,我尝试了很多东西。 事实证明这是数据格式的问题。 当我直接发送字典时,响应为空(状态码为200)。 当我发送一个json字符串作为数据时,我得到了预期的响应。

import json

DATA = {
    "method"  : "object.read",
    "params"  : "",
    "id"      : 142
}

# R = requests.request("POST", URL_PATH, data=payload, headers=HEADERS)  # suggested by Postman
R = requests.post(URL_PATH, json=json.dumps(DATA), headers=HEADERS)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM