【发布时间】:2018-07-24 05:44:55
【问题描述】:
我正在尝试使用 python 请求库发送一个 http GET 请求。以下是我的代码。
#!/usr/bin/python3
import requests
import json
URL = some-elkstack-url
datam = {'ayyo' : 'vammo'}
data_json = json.dumps(datam)
payload = {'json_payload': data_json}
header={'Content-Type': 'application/json' }
r = requests.get(url=URL, headers=header, data=datam)
a = r.json()
print('\nResponse: \n')
print(a)
我从服务器收到了这个 HTTP 错误。
{'error': {'root_cause': [{'type': 'json_parse_exception', 'reason': "Unrecognized token 'ayyo': was expecting ('true', 'false' or 'null')\n at
[Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@74cef381; line: 1, column: 6]"}], 'type': 'json_parse_exception', 'reason': "Unrecognized token 'ayyo': was expecting ('true', 'false' or 'null')\n at
[Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@74cef381; line: 1, column: 6]"}, 'status': 500}
当我从命令行执行 curl 时,使用相同的 json 数据我可以获得正确的响应。我的代码出了什么问题?
【问题讨论】:
-
响应告诉你为什么请求无法完成:
'reason': "Unrecognized token 'ayyo': was expecting ('true', 'false' or 'null') -
实际上,当我使用相同的 JSON 运行 curl 时,服务器并没有抱怨。所以我想我在形成 JSON 对象时可能遗漏了一些语法。
-
当您提供任何已识别的(true、false、null)标记作为参数时会发生什么?我也不认为你需要转储
datamdict。你应该可以按原样传递它。 -
我尝试发送和不发送。实际上在上面的代码中,我发送时没有转储。我会尝试检查当我发送 true、false 或 null 时会发生什么,但如果服务器在使用 cURL 发送相同的 JSON 时没有问题,它不应该也接受这段代码吗?
标签: python json http python-requests