`dumps` shouldn't be necessary unless you expect some problem calling `__str__` on `_todict()`'s results. Furthermore, I suspect that passing the `data` parameter as bytes will stop it from being url-encoded (http://docs.python-requests.org/en/latest/user/quickstart/#more-complicated-post-requests)