【问题标题】:Swagger API and interaction with python requestsSwagger API 和与 python 请求的交互
【发布时间】:2019-12-31 21:23:40
【问题描述】:

购买了一种产品,使我们的用户能够通过 HTTP 发送/接收 SMS。现在我的工作是将它构建到我们当前的 CMS 平台和数据库中。它有一个招摇的 API。

这是我尝试发送的特定 POST 请求的文档: POST: Send an SMS Message

这是我用来测试功能的简单 python 程序。我得到一个通用的 500 内部服务器错误响应。我做错了什么?

import requests

API_URL = "https://api.kenect.com/v1/conversations/messages"

headers = {
    'x-api-token': '****************',
    'x-api-key': '*******************',
    'Content-Type': 'application/json',
}

params = {
    'contactPhone': '158572968**',
    'locationId': '2045',
    'messageBody': 'test sms',
    'outgoing': 'true',           
}

r=requests.post(url = API_URL, headers = headers, params = params)

print(r)

【问题讨论】:

  • 似乎有 2 个问题。查看更新的答案。

标签: python python-requests swagger


【解决方案1】:

似乎有两个问题:

  1. 内容类型和负载编码。

    您在post 方法中使用了params 参数。 paramsget 方法一起用于passing data in the URL's query string

    post 方法中,根据所需的内容类型,您需要使用data 参数到send form-encoded data

    r=requests.post(url = API_URL, headers = headers, data = params)

    json参数发送application/json有效载荷:

    r=requests.post(url = API_URL, headers = headers, json = params)

    从您的 headers 字典中删除“Content-Type”键。 datajson 参数会自动设置正确的内容类型。

  2. outgoing 不是 /v1/conversations/messages 资源的有效请求参数。该字段来自响应对象,而不是请求对象。从您的有效负载中删除它。

总而言之,对于表单编码的有效负载,代码应如下所示:

import requests

API_URL = "https://api.kenect.com/v1/conversations/messages"

headers = {
    'x-api-token': '****************',
    'x-api-key': '*******************',
}

params = {
    'contactPhone': '158572968**',
    'locationId': '2045',
    'messageBody': 'test sms',       
}

r=requests.post(url = API_URL, headers = headers, data = params)

【讨论】:

  • 感谢您的建议和提示-但仍然是相同的 [500] 响应...即使使用邮递员!
  • 嗯,它可能是不同的 500 :) 你能分享请求和响应对象的内容,看看幕后发生了什么吗?
  • 致力于让您从发送请求的 python 程序中打印并保存实际响应。当使用邮递员传递最低要求的标头和参数时,响应是“不支持内容类型'application/json'”..但是在尝试其他内容类型时,这些似乎都不起作用(同样的不支持错误)。参考文档,该示例显示内容类型“字符串”,但这对我来说没有意义。与文本相关的内容类型也不起作用。让我知道你想看什么,我会按照你的方式发送。感谢您的宝贵时间!
  • 哦,我错过了 json 内容类型。如果将data 参数替换为json 参数:r=requests.post(url = API_URL, headers = headers, json = params,会发生什么?
  • 我也在与他们的支持人员一起努力解决这个问题。他们能够告诉我此请求的正确内容类型是“application/x-www-form-urlencoded”......唉,在邮递员中仍然无法使用该内容类型。那么是否有用于 application/x-www-form-urlencoded 的替代参数可能有效?
猜你喜欢
  • 2023-03-19
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 2015-08-05
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多