Marcus
Marcus

Reputation: 9472

Django calls with Json. Common_Unsupported_Media_Type

I'm trying to make a RESTful api call in python/django with requests.post

I can get requests.get(url=url, auth=auth) to work. Similar call in the same api family for this company

I'm trying to do:

data = {'start': 13388, 'end': 133885, 'name': 'marcus0.5'}
r = requests.post(url=url, auth=auth, headers={'Accept': 'application/json'}, data=data)

and I get the following error:

>>> r.text
     u'{"status":"error","errorCode":"COMMON_UNSUPPORTED_MEDIA_TYPE","incidentId":"czEtbXNyZXBvcnRzMDQuc3RhZ2V4dHJhbmV0LmFrYW1haS5jb20jMTM3NTgxMzc3MTk4NQ==","errorMessage":"The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method.. Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported."}'

I think it has something to do with the json, but I'm not sure what and I'm not sure how to fix it. Any ideas?

Extra info [not sure if it applies]:

I imported

import requests, django

I know the the auth is correct and I tested it with the get method

Upvotes: 2

Views: 3431

Answers (1)

FastTurtle
FastTurtle

Reputation: 2311

You want to set the Content-Type parameter of your request to 'application/json', not the Accept parameter.

Taken from w3.org:

The Accept request-header field can be used to specify certain media types which are acceptable for the response.

Try this instead:

import json

data = {'start': 13388, 'end': 133885, 'name': 'marcus0.5'}
r = requests.post(url=url, auth=auth, data=json.dumps(data),
                  headers={'content-type': 'application/json'})

EDIT:

There is a little bit of confusion (for me as well) about when to send data as a dict or a json encoded string (ie. the result of json.dumps). There is an excellent post here that explains the problem. For a brief summary send a dict when the API requires form-encoded data, and a json encoded string when it requires json-encoded data.

Upvotes: 4

Related Questions