Resending, with the right subject line this time. >> Instead I have captured the TCP stream (pasted below) using a packet >> sniffer, and as you can see the content-length is 0. > > Right, but what is your app telling libcurl? >
success = SetBoolOpt(CURLOPT_POST, true) && SetSizeOpt(CURLOPT_POSTFIELDSIZE, request.request()->length()) && SetStringOpt(CURLOPT_POSTFIELDS, *(request.request())); I have some wrappers around curl_easy_opt, pasted below. At the end of the above line the value of success is true and request.request()->length() is non-zero. request.request() points to string whose lifetime is maintained until curl_easy_perform returns. bool HttpConnection::SetStringOpt(CURLoption option, const string& value) { return SetCurlOpt(curl_handle_, option, value.c_str()); } bool HttpConnection::SetBoolOpt(CURLoption option, bool value) { return SetCurlOpt(curl_handle_, option, static_cast<int64>(value)); } bool HttpConnection::SetSizeOpt(CURLoption option, size_t value) { return SetCurlOpt(curl_handle_, option, static_cast<int64>(value)); } template <typename Parameter> static bool SetCurlOpt(CURL* handle, CURLoption option, const Parameter parameter) { if (!handle) { return false; } CURLcode rv = curl_easy_setopt(handle, option, parameter); if (rv) { LOG("libcurl error: %s.\n", Logger::WARN, curl_easy_strerror(rv)); } return rv == CURLE_OK; } ------------------------------------------------------------------- List admin: http://cool.haxx.se/list/listinfo/curl-library Etiquette: http://curl.haxx.se/mail/etiquette.html