request.post的不受支持的媒体类型错误

时间:2020-01-27 07:18:01

标签: python json api http-status-code-415

我正在使用python进行api调用。在这里,我具有要尝试访问的网站中生成的json格式的参数。但是,当我尝试运行该程序时,出现了415: unsupported Media Type错误。不确定我在做什么错,因为我使用的是网站生成的参数。

到目前为止,这是我的代码

def jprint(obj):
    text = json.dumps(obj, sort_keys=True, indent=4)
    print(text)


url = 'https://einv-apisandbox.nic.in/gstvital/api/auth'

parameters = {
  "header": {
    "ClientID": "TheClientIDGoesHere",
    "ClientSecret": "TheClientSecretGoesHere"
  },

  "data": {
    "UserName": "Username",
    "Password": "Password",
    "AppKey": "AppKey",
    "ForceRefreshAccessToken": "false"
  }
}

response = requests.post(url, params=parameters)

jprint(response.json())

在上面的代码中,我删除了实际参数,并将其替换为伪文本。但是当我用实际参数尝试它们时,出现以下错误

{
    "status": 415,
    "title": "Unsupported Media Type",
    "traceId": "|df46105a-49e1b43f80675626.",
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.13"
}

我更改的一件事是这段代码"ForceRefreshAccessToken": "false"。在生成的json代码中,false不在引号内

不确定我在做什么错。请帮助我。

1 个答案:

答案 0 :(得分:1)

import requests
import json


def jprint(obj):
    text = json.dumps(obj, sort_keys=True, indent=4)
    print(text)


url = 'https://einv-apisandbox.nic.in/gstvital/api/auth'

parameters = {
    "header": {
        "ClientID": "TheClientIDGoesHere",
        "ClientSecret": "TheClientSecretGoesHere"
    },

    "data": {
        "UserName": "Username",
        "Password": "Password",
        "AppKey": "AppKey",
        "ForceRefreshAccessToken": False
    }
}

hdr = {"Content-Type": "application/json"}

response = requests.post(url, data=parameters, headers=hdr)

print(response.status_code)

print(response.json())

错误415表示该站点不支持媒体类型。可以通过在标头中明确指出内容类型为JSON来解决此问题。 hdr = {"Content-Type": "application/json"}来自该站点的响应代码为“ 200:OK”,因此您的请求有效。