首页 > 解决方案 > 使用 requests 模块将“curl -X PUT ... - G ...”转换为 python

问题描述

我正在尝试编写一些 python 代码来与 New Relic 的 API 交互。我正在使用请求模块。在大多数情况下,我都取得了成功,但我在调用一个 API 时遇到了麻烦。他们的文档使用示例 curl 命令表示调用:

https://docs.newrelic.com/docs/alerts/rest-api-alerts/new-relic-alerts-rest-api/rest-api-calls-new-relic-alerts (在“更新与政策相关的通知渠道")

curl -X PUT 'https://api.newrelic.com/v2/alerts_policy_channels.json' \
     -H 'X-Api-Key:{admin_api_key}' -i \
     -H 'Content-Type: application/json' \
     -G -d 'policy_id=policy_id&channel_ids=channel_id'

我的主要问题是我不清楚如何使用响应库将 -G 转换为 python。我什至不完全确定我理解那个标志在做什么,听起来除了初始 PUT 之外它还在发出额外的 get 请求?

我一直在使用这个转换器工具,它适用于我一直在使用的大多数 curl 调用,但不是这个。

https://curl.trillworks.com/

这是根据上面的 curl 命令生成的(不起作用):

import requests

headers = {
    'X-Api-Key': '{admin_api_key}',
    'Content-Type': 'application/json',
}

data = {
  'policy_id': 'policy_id',
  'channel_ids': 'channel_id'
}

response = requests.put('https://api.newrelic.com/v2/alerts_policy_channels.json', headers=headers, data=data)

这基本上是相同的代码,只是包装在我实际使用它的函数中:

def set_alert_policy_notification_channel(admin_api_key, policy_id, notification_channel_id):
    headers = {
        'X-Api-Key': admin_api_key,
        'Content-Type': 'application/json',
    }

    data = {
    'policy_id': policy_id,
    'channel_ids': notification_channel_id
    }

    response = requests.put('https://api.newrelic.com/v2/alerts_policy_channels.json', headers=headers, data=data)
    logging.debug(response)
    return response

当我拨打电话时,我收到 500 错误,可能是因为请求的格式不正确:

2019-07-11 09:35:31,546 - 调试 - 开始新的 HTTPS 连接 (1):api.newrelic.com:443 2019-07-11 09:35:32,046 - 调试 - https://api.newrelic.com :443 “PUT /v2/alerts_policy_channels.json HTTP/1.1”500 无 2019-07-11 09:35:32,293 - 调试 -

标签: pythonpython-3.xcurlnewrelic

解决方案


500 状态码是内部服务器错误,这意味着服务器由于某种未知原因无法处理请求。我的猜测是您的代码没有任何问题,并且这是他们的服务器问题......我确实在他们的网站上注意到了这一点:

https://rpm.newrelic.com/api/explore/applications/update

500 发生服务器错误,请联系 New Relic 支持


推荐阅读