通过 Python 请求请求 Datadog 日志时出现错误 500
Error 500 when requesting Datadog logs by Python Requests
我有以下 curl
命令可以正常工作:
curl -X POST -H 'content-type: application/json' -H "DD-API-KEY: ${api_key}" -H "DD-APPLICATION-KEY: ${app_key}" \
-d '{
"query": "service:my_service",
"time": {
"from": "2019-11-28T00:00:00Z",
"to": "2019-11-28T16:00:00Z"
},
"sort": "asc",
"limit": 1000
}' "https://api.datadoghq.com/api/v1/logs-queries/list" -o output3.json5
然后我将此请求转换为 Python 请求,curl
方法有效,但 Python returns 500 错误,没有任何详细信息。
import requests
def main():
headers = {
'content-type': 'application/json',
'DD-API-KEY': 'AAA',
'DD-APPLICATION-KEY': 'XXX',
}
data = {
"query": "service:my_service",
"time": {
"from": "now - 1h",
"to": "now"
},
"sort": "asc",
"limit": 50
}
response=requests.post("https://api.datadoghq.com/api/v1/logs-queries/list",headers=headers, data=data)
我在 Docker 之外尝试过,猜测可能连接是关键,但它也不起作用。
将两者都指向 httpbin 这样的服务,看看它们有何不同。
Requests 的 data
选项默认情况下 POST 请求 generates form-encoded data,而 curl
直接传递 JSON 字符串。您可以手动将有效负载编码为 JSON 字符串:
import json
response = requests.post(..., data=json.dumps(data))
# ^^^^^^^^^^
或者如果您有 Requests 版本 2.4.2 或更高版本,您可以使用 json
参数将您的 dict
自动转换为 JSON:
response = requests.post(..., json=data)
# ^^^^
我有以下 curl
命令可以正常工作:
curl -X POST -H 'content-type: application/json' -H "DD-API-KEY: ${api_key}" -H "DD-APPLICATION-KEY: ${app_key}" \
-d '{
"query": "service:my_service",
"time": {
"from": "2019-11-28T00:00:00Z",
"to": "2019-11-28T16:00:00Z"
},
"sort": "asc",
"limit": 1000
}' "https://api.datadoghq.com/api/v1/logs-queries/list" -o output3.json5
然后我将此请求转换为 Python 请求,curl
方法有效,但 Python returns 500 错误,没有任何详细信息。
import requests
def main():
headers = {
'content-type': 'application/json',
'DD-API-KEY': 'AAA',
'DD-APPLICATION-KEY': 'XXX',
}
data = {
"query": "service:my_service",
"time": {
"from": "now - 1h",
"to": "now"
},
"sort": "asc",
"limit": 50
}
response=requests.post("https://api.datadoghq.com/api/v1/logs-queries/list",headers=headers, data=data)
我在 Docker 之外尝试过,猜测可能连接是关键,但它也不起作用。
将两者都指向 httpbin 这样的服务,看看它们有何不同。
Requests 的 data
选项默认情况下 POST 请求 generates form-encoded data,而 curl
直接传递 JSON 字符串。您可以手动将有效负载编码为 JSON 字符串:
import json
response = requests.post(..., data=json.dumps(data))
# ^^^^^^^^^^
或者如果您有 Requests 版本 2.4.2 或更高版本,您可以使用 json
参数将您的 dict
自动转换为 JSON:
response = requests.post(..., json=data)
# ^^^^