Hi, I've got a C++ library that is using libCurl to communicate with www.google-analytics.com. For the most part, it is working. But in one case it is not. When I POST a string to that site from Windows it responds with 411 - Length required. I've attached libCurl logging output below, and "Content-Length" is being set. I've debugged into the library and found/fixed some things in my library, but I'm still getting this 411 response. When I POST with the same code from the Mac, it works: GA responds with 200.
Other data points: * Our libCurl library is old 7.42, but the problem happens with 7.77 as well * The same code POSTs successfully on the Mac * GET commands work * A second site that we POST to is responding with a 400 error, and I was told by the DevOp at that site that the body being sent is empty * I fabricated the same command and sent it via curl.exe on the command line, successfully Any suggestions of what could be going wrong? Or how to debug this further? I'm at a brick wall. Thanks! /Michael Ost, Avid Technology Appendix 1: Here are all of the curl_easy_setopt that we make. You won't necessarily know what the values are, but I thought maybe the setup calls might provide a clue. * CURLOPT_ACCEPT_ENCODING, "" * CURLOPT_VERBOSE, 1 * CURLOPT_DEBUGFUNCTION, debug_callback * CURLOPT_CONNECTTIMEOUT, cConnectTimeout * CURLOPT_NOSIGNAL, 1L * CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 * CURLOPT_URL, pr->mRequest->mURL.c_str() * CURLOPT_POST, 1 * CURLOPT_POSTFIELDSIZE, upStream.mUploadString.size() * CURLOPT_COPYPOSTFIELDS, upStream.mUploadString.c_str() * CURLOPT_HTTPHEADER, pr->mHeaders * CURLOPT_WRITEFUNCTION, &RstE_Worker::WriteFunction * CURLOPT_WRITEDATA, pr * CURLOPT_HEADERFUNCTION, &RstE_Worker::HeaderFunction * CURLOPT_HEADERDATA, pr * CURLOPT_SSL_VERIFYPEER, 1L * CURLOPT_SSL_VERIFYHOST, 2L Appendix 2: And here is debug logging from the library when the call is made. I added the CURL_DEBUG_CALLBACK(type) strings: CURL_DEBUG_CALLBACK (info): Hostname www.google-analytics.com<http://www.google-analytics.com> was found in DNS cache CURL_DEBUG_CALLBACK (info): Trying 216.58.194.206... CURL_DEBUG_CALLBACK (info): Connected to www.google-analytics.com<http://www.google-analytics.com> (216.58.194.206) port 443 (#8) CURL_DEBUG_CALLBACK (info): schannel: SSL/TLS connection with www.google-analytics.com<http://www.google-analytics.com> port 443 (step 1/3) CURL_DEBUG_CALLBACK (info): schannel: checking server certificate revocation CURL_DEBUG_CALLBACK (info): schannel: sending initial handshake data: sending 185 bytes... CURL_DEBUG_CALLBACK (info): schannel: sent initial handshake data: sent 185 bytes CURL_DEBUG_CALLBACK (info): schannel: SSL/TLS connection with www.google-analytics.com<http://www.google-analytics.com> port 443 (step 2/3) CURL_DEBUG_CALLBACK (info): schannel: failed to receive handshake, need more data RstE_Worker::ThreadMethod - calling curl_multi_performCURL_DEBUG_CALLBACK (info): schannel: SSL/TLS connection with www.google-analytics.com<http://www.google-analytics.com> port 443 (step 2/3) CURL_DEBUG_CALLBACK (info): schannel: encrypted data buffer: offset 4096 length 4096 CURL_DEBUG_CALLBACK (info): schannel: encrypted data length: 4028 CURL_DEBUG_CALLBACK (info): schannel: encrypted data buffer: offset 4028 length 4096 CURL_DEBUG_CALLBACK (info): schannel: received incomplete message, need more data CURL_DEBUG_CALLBACK (info): schannel: SSL/TLS connection with www.google-analytics.com<http://www.google-analytics.com> port 443 (step 2/3) CURL_DEBUG_CALLBACK (info): schannel: encrypted data buffer: offset 4391 length 5052 CURL_DEBUG_CALLBACK (info): schannel: sending next handshake data: sending 93 bytes... CURL_DEBUG_CALLBACK (info): schannel: SSL/TLS connection with www.google-analytics.com<http://www.google-analytics.com> port 443 (step 2/3) CURL_DEBUG_CALLBACK (info): schannel: encrypted data buffer: offset 292 length 5052 CURL_DEBUG_CALLBACK (info): schannel: SSL/TLS handshake complete CURL_DEBUG_CALLBACK (info): schannel: SSL/TLS connection with www.google-analytics.com<http://www.google-analytics.com> port 443 (step 3/3) CURL_DEBUG_CALLBACK (info): schannel: incremented credential handle refcount = 1 CURL_DEBUG_CALLBACK (info): schannel: stored credential handle in session cache CURL_DEBUG_CALLBACK (=> Send header): POST /batch HTTP/1.1 Host: www.google-analytics.com<http://www.google-analytics.com> Accept: */* Accept-Encoding: identity Authorization: Bearer MDA*********************** User-Agent: avid-ptc-google-analytics Content-type: text/plain Content-Length: 522 CURL_DEBUG_CALLBACK (=> Send data): v=1&ds=app&tid=UA-85021764-2&an=protools_unit_test&av=x.y.z&ua=AvidProTools%2f12.X%20(Windows%20NT%201.2%3b%20Win64%3b%20x64)&ul=zh-CN&cid=b5543933-084c-a54b-8b90-a515dd86a4c4&t=event&ec=jawhol&ea=sargeantSchultz&el=deutsch&ev=999&cd=protools_unit_test&z=984363590 v=1&ds=app&tid=UA-85021764-2&an=protools_unit_test&av=x.y.z&ua=AvidProTools%2f12.X%20(Windows%20NT%201.2%3b%20Win64%3b%20x64)&ul=zh-CN&cid=b5543933-084c-a54b-8b90-a515dd86a4c4&t=event&ec=jawhol&ea=colonelHogan&el=gi&ev=777&cd=protools_unit_test&z=311506490 CURL_DEBUG_CALLBACK (info): upload completely sent off: 522 out of 522 bytes CURL_DEBUG_CALLBACK (info): schannel: client wants to read 16384 bytes CURL_DEBUG_CALLBACK (info): schannel: encrypted data buffer: offset 0 length 16384 CURL_DEBUG_CALLBACK (info): schannel: encrypted data got 1783 CURL_DEBUG_CALLBACK (info): schannel: encrypted data buffer: offset 1783 length 16384 CURL_DEBUG_CALLBACK (info): schannel: decrypted data length: 1401 CURL_DEBUG_CALLBACK (info): schannel: decrypted data added: 1401 CURL_DEBUG_CALLBACK (info): schannel: decrypted data cached: offset 1401 length 16384 CURL_DEBUG_CALLBACK (info): schannel: encrypted data length: 353 CURL_DEBUG_CALLBACK (info): schannel: encrypted data cached: offset 353 length 16384 CURL_DEBUG_CALLBACK (info): schannel: decrypted data length: 324 CURL_DEBUG_CALLBACK (info): schannel: decrypted data added: 324 CURL_DEBUG_CALLBACK (info): schannel: decrypted data cached: offset 1725 length 16384 CURL_DEBUG_CALLBACK (info): schannel: decrypted data buffer: offset 1725 length 16384 CURL_DEBUG_CALLBACK (info): schannel: decrypted data returned 1725 CURL_DEBUG_CALLBACK (info): schannel: decrypted data buffer: offset 0 length 16384 CURL_DEBUG_CALLBACK (info): HTTP 1.0, assume close after body CURL_DEBUG_CALLBACK (<= Recv header): HTTP/1.0 411 Length Required CURL_DEBUG_CALLBACK (<= Recv header): Content-Type: text/html; charset=UTF-8 CURL_DEBUG_CALLBACK (<= Recv header): Referrer-Policy: no-referrer CURL_DEBUG_CALLBACK (<= Recv header): Content-Length: 1564 CURL_DEBUG_CALLBACK (<= Recv header): Date: Wed, 09 Feb 2022 23:41:30 GMT CURL_DEBUG_CALLBACK (<= Recv header): CURL_DEBUG_CALLBACK (<= Recv data): <!DOCTYPE html> <html lang=en> <meta charset=utf-8> <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width"> <title>Error 411 (Length Required)!!1</title> <style> *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png<http://www.google.com/images/errors/robot.png>) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png<http://www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png>) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png<http://www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png>) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png<http://www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png>) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png<http://www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png>) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px} </style> <a href=//www.google.com/<http://www.google.com/>><span id=logo aria-label=Google></span></a> <p><b>411.</b> <ins>ThatΓÇÖs an error.</ins> <p>POST requests require a <code>Content-length</code> header. <ins>ThatΓÇÖs all we know.</ins> CURL_DEBUG_CALLBACK (info): Closing connection 8 CURL_DEBUG_CALLBACK (info): schannel: shutting down SSL/TLS connection with www.google-analytics.com<http://www.google-analytics.com> port 443 CURL_DEBUG_CALLBACK (info): schannel: clear security context handle CURL_DEBUG_CALLBACK (info): schannel: decremented credential handle refcount = 0
-- Unsubscribe: https://lists.haxx.se/listinfo/curl-library Etiquette: https://curl.haxx.se/mail/etiquette.html