简体   繁体   中英

post data using python-requests

I'm trying to post the following data. But I'm getting an error. Can you please take look? Thanks a lot.

I'm posting the same data using Postman. And it works.

def _build_post_data(bike_instance):
    """
    data = {
        "apikey": "XXX",
        "data": {
            "created_at": "date_XX",
            "Price": "Decimal_XX"
        }
    }
    """
    data = {}
    raw_data = serializers.serialize('python', [bike_instance])
    actual_data = [d['fields'] for d in raw_data]
    data.update(
        {
            "apikey": XXX,
            "data": actual_data[0]
        }
    )
    return data

Posting data

bike = Bike.objects.get(pk=XXX)

data = _build_post_data(bike)

dump_data = json.dumps(data, cls=DjangoJSONEncoder)

requests.post(url, data=dump_data)

error

u'{"error":{"message":"422 Unprocessable Entity","errors":[["The data field is required."],["The apikey field is required."]],"status_code":422}}'

data and apikey already in the dict. then why I'm getting an error? Any idea?

Postman works

在此处输入图片说明

With Postman you are sending a multipart/form-data request, with requests you only send JSON (the value of the data field in Postman), and are not including the apikey field.

Use a dictionary with the JSON data as one of the values, and pass that in as the files argument. It probably also works as the data argument (sent as application/x-www-urlencoded ):

form_structure = {'apikey': 'XXXX', 'data': dump_data}
requests.post(url, files=form_structure)
# probably works too: requests.post(url, data=form_structure)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM