I’m trying to do an HTTP POST to a REST service (.NET Web Api) that doesn’t work well with chunked transfer encoding. Does anyone have a working example of sending an HTTP POST with the Content-Length header specified?
There are a large number of posts here regarding the topic, but I’ve not seen one where someone managed to get non-chunked transfers to work.
Session channel is openened like this:
_sessionChannel = wip_HTTPClientCreateOpts (NULL, NULL, //WIP_COPT_HTTP_DATA_ENCOD, 0, //WIP_COPT_HTTP_VERSION, wip_httpVersion_e::WIP_HTTP_VERSION_1_0, WIP_COPT_HTTP_HEADER, "User-Agent", "WIP-HTTP-Client/1.0", WIP_COPT_END);
Data channel like this:
_dataChannel = wip_getFileOpts (_sessionChannel, const_cast<ascii*> (_url.c_str ()), HttpClient::HttpClientImpl::HttpEventHandler, this, WIP_COPT_HTTP_METHOD, WIP_HTTP_METHOD_POST, //WIP_COPT_HTTP_DATA_ENCOD, 0, //WIP_COPT_HTTP_VERSION, wip_httpVersion_e::WIP_HTTP_VERSION_1_0, WIP_COPT_HTTP_HEADER, "Accept", _contentType, WIP_COPT_HTTP_HEADER, "Content-Type", _contentType, //WIP_COPT_HTTP_HEADER, "Content-Length", _requestData.size(), WIP_COPT_END);
I have tried to use HTTP version 1.0, as some people reported having more success with that. This did not work at all.
I’ve tried to use WIP_COPT_HTTP_DATA_ENCOD, but the channel is then not opened.
I tried using the various options with wip_HTTPClientCreateOpts and wip_getFileOpts, but no combination seems to work.
Specifying Content-Length always causes an HTTP 400 error. I also tried sending the Content-Length as a string, but with the same result.
I do call wip_shutdown after all data is written. The amount of data is small, typically 40-50 bytes, so it is written in one go with wip_write.