By default, cURL adds a Expect: 100-Continue header to certain requests. This can add as much as a second delay to requests done using cURL. This is discussed on the cURL mailing list.
The general practice is to set an empty Expect header when the request payload is small. This is something other cURL clients like Guzzle and Stripe do.