Swagger API和与python请求的交互

Swagger API和与python请求的交互,python,python-requests,swagger,Python,Python Requests,Swagger,购买了一款产品,使我们的用户能够通过HTTP发送/接收SMS。现在,我的工作是将其构建到我们当前的CMS平台和数据库中。它有一个招摇过市的API 以下是我试图发送的特定POST请求的文档: 下面是我的简单python程序,用于测试功能。我得到一个通用的500内部服务器错误响应。我做错了什么 import requests API_URL = "https://api.kenect.com/v1/conversations/messages" headers = { 'x-api-t

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

以下是我试图发送的特定POST请求的文档:

下面是我的简单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)

似乎有两个问题:

  • 内容类型和有效负载编码

    您正在
    post
    方法中使用
    params
    参数
    params
    与的
    get
    方法一起使用

    post
    方法中,根据所需的内容类型,您需要使用
    data
    参数来:

    r=requests.post(url=API\uurl,headers=headers,data=params)

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

    r=requests.post(url=API\uurl,headers=headers,json=params)

    标题中删除“Content Type”键
    data
    json
    参数将自动设置正确的内容类型

  • 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)
    

    似乎有两个问题:

  • 内容类型和有效负载编码

    您正在
    post
    方法中使用
    params
    参数
    params
    与的
    get
    方法一起使用

    post
    方法中,根据所需的内容类型,您需要使用
    data
    参数来:

    r=requests.post(url=API\uurl,headers=headers,data=params)

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

    r=requests.post(url=API\uurl,headers=headers,json=params)

    标题中删除“Content Type”键
    data
    json
    参数将自动设置正确的内容类型

  • 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程序中打印并保存实际响应。当使用postman传递所需的最小标题和参数时,响应为“Content type‘application/json’not supported”。。但是,在尝试其他内容类型时,这些内容类型似乎都不起作用(相同的不支持错误)。参考文档,示例显示了内容类型“string”,但这对我来说没有意义。与文本相关的内容类型也不起作用。让我知道你想看什么,我会寄给你的。谢谢你抽出时间!哦,我错过了json内容类型。如果用
    json
    param:
    r=requests.post(url=API_url,headers=headers,json=params
    )替换
    data
    param会发生什么?我也在与他们的支持人员一起努力解决这个问题。他们告诉我,这个请求的正确内容类型是“application/x-www-form-urlencoded”…唉,在具有该内容类型的postman中仍然不起作用。那么,是否有其他参数可用于应用程序/x-www-form-urlencoded,这可能会起作用?感谢您的建议和提示-但仍然是相同的[500]响应…即使在使用postman时也是如此!嗯,可能是另一个500:)您能否共享请求和响应对象的内容,以查看引擎盖下发生了什么?正在努力让您从发送请求的python程序中打印并保存实际响应。当使用postman传递所需的最小标题和参数时,响应为“Content type‘application/json’not supported”。。但是,在尝试其他内容类型时,这些内容类型似乎都不起作用(相同的不支持错误)。参考文档,示例显示了内容类型“string”,但这对我来说没有意义。与文本相关的内容类型也不起作用。让我知道你想看什么,我会寄给你的。谢谢你抽出时间!哦,我错过了json内容类型。如果用
    json
    param:
    r=requests.post(url=API_url,headers=headers,json=params
    )替换
    data
    param会发生什么?我也在与他们的支持人员一起努力解决这个问题。他们告诉我,这个请求的正确内容类型是“application/x-www-form-urlencoded”…唉,在具有该内容类型的postman中仍然不起作用。因此,是否有其他参数可用于可能起作用的application/x-www-form-urlencoded?似乎有2个问题。请参阅更新的答案。似乎有2个问题。请参阅更新的答案。