python - 使用 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 调用,但不是这个。
这是根据上面的 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 - 调试 -
解决方案
500 状态码是内部服务器错误,这意味着服务器由于某种未知原因无法处理请求。我的猜测是您的代码没有任何问题,并且这是他们的服务器问题......我确实在他们的网站上注意到了这一点:
https://rpm.newrelic.com/api/explore/applications/update
500 发生服务器错误,请联系 New Relic 支持
推荐阅读
- php - Laravel 查询记录丢失的更新查询
- python - Pandas 将偏差最小的不规则时间序列滚动到规则间隔序列
- javascript - 删除 AM | 来自日期变量的 PM
- android-gradle-plugin - 仅向 Kotlin DSL 中的“免费”产品风格添加实现依赖项
- javascript - Node js承诺结果在其他功能中使用
- apache-kafka - Apache Storm JoinBolt
- linux - 嵌入式期望脚本返回成功或失败到 bash
- windows - GO C 风格的控制台应用程序
- ruby-on-rails - 尝试运行 Sidekiq 时出错 (Rails 5.2.1)
- php - 带有正则表达式路由参数的 Lumen 中的 route() 函数返回一个错误的 url