【发布时间】:2018-06-03 06:43:18
【问题描述】:
我知道之前讨论过这个问题,但我找不到适合我用例的有效解决方案。
我们有一个返回数据的内部服务器(抱歉,没有可用的外部地址)。在端点上调用 POST 方法会返回一个 JSON。我尝试使用Postman tool 发布帖子以检查是否收到有效回复。使用邮递员时,我收到了预期的响应。不需要身份验证。
但是,Python Client 无法返回数据,并收到一个空响应。
代码 sn-p:
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()
输出是:
类型:应用程序/json
文本:空
JSON:无
内容 b'null'
知道我的 Python 代码有什么问题吗?为什么没有返回数据,但是是在使用单独的工具时?
我也尝试在 post() 中使用 data=:
S.post(URL_PATH, headers=HEADERS, data=json.dumps(DATA))
或直接使用 requests.post() 跳过 Session()。
【问题讨论】:
-
你能发送任何请求吗?尝试对另一个 URI 发出简单的
GET请求,你会得到正确的响应吗? -
不确定,但 Postman 肯定允许您将查询导出为 curl 命令。你能把它贴在这里吗?所以我们可以检查是否有任何区别
-
这是一个很棒的建议!是的,我发现菜单选项将请求提取为 Python 的代码。知道吗?现在它起作用了!不知道究竟是什么错误。邮递员通过 response = requests.request("POST", url, data=payload, headers=headers) 发送请求,但 requests.post() 也可以正常工作。我会放弃下面的工作片段......
标签: python json rest post python-requests