[Answered ]-Why can't I POST to Django with pyCurl?

2👍

✅

Found the answer:
It needs length of the request body to handle correctly

For POST:

curl.setopt(pycurl.POSTFIELDSIZE, len(body))  

For PUT:

curl.setopt(pycurl.INFILESIZE, len(body))

(Yes, it’s a different option for different HTTP calls… that’s libcurl for you)

Not completely sure what triggers this behaviour, but the above fixes it and the tests work now.

EDIT: Adding verbose pycurl output from this:

* About to connect() to localhost port 8000 (#0)
*   Trying 127.0.0.1...
* connected
* Connected to localhost (127.0.0.1) port 8000 (#0)
> PUT /api/person/1/ HTTP/1.1
User-Agent: PycURL/7.27.0
Host: localhost:8000
Accept: */*
Content-Type: application/json
Content-Length: 72

* We are completely uploaded and fine
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Date: Fri, 06 Jun 2014 17:41:38 GMT
< Server: WSGIServer/0.1 Python/2.7.3
< Vary: Accept
< X-Frame-Options: SAMEORIGIN
< Content-Type: application/json
< 
* Closing connection #0
{"first_name": "Gaius", "id": 1, "last_name": "Baltar", "login": "gbaltar", "pk": "1", "resource_uri": "/api/person/1/"}

Leave a comment