Unsolved Prevent multiple TCP segments in post request
-
This post is deleted! -
Simple curl code works:
const std::string url{ "http://" + m_addr + "/od/2400/01" }; CURL *curl; CURLcode res; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, url.c_str() ); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "\"00000001\""); res = curl_easy_perform(curl); if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); curl_easy_cleanup(curl); } curl_global_cleanup();
QNetworkManager post failed.
-
@vicsoftware why do you post the code that "works" for you and not the one that doesn't!?!?!
-
@vicsoftware
Two comments:-
As @Christian-Ehrlicher has said, you need to produce (minimal, test) Qt code, not curl code, if you want someone to look at it as a Qt issue.
-
You, and your program, are never supposed to care what is going on at the TCP packet level. Whether an application makes a request which gets passed as one TCP packet, or two, or other, should have no effect. We have all used TCP for years, with Qt or other toolkits, and never cared about this or noticed any behaviour such as you report with "errors" occurring. Again, for the record, it is basically down to the OS/TCP level how it chooses to packet-ise messages. Artefacts such as Nagle's algorithm will commonly affect the runtime packet behaviour.
-
-
@J-Hilk QT code posted above.
-
@JonB I have nanotec.com tcp controller C5-E-2-81. It has REST API to control driver. So i can only get/post. And i can't reproduce for you it. You do not have that controller.
I tried online service and it works. But that service do not dispatch input data, it only receives post so it is not the same as controller.In this case, the question is why all other methods do but QT does not? It simple post but it does not work.
-
Why does your curl data,
"\"00000001\"="
and Qt data,"\"00000002\""
both have a content length of '10' (at least that's what you put in the request header for both)? Will you ever include a 'value' with your form request (i.e., don't form requests usually consist of key-value pairs)? -
@mchinand Yes. It is only key value of 10bytes without value. Such controller REST API and recommendations from developers. Digit does not matter.
-
@vicsoftware said in Prevent multiple TCP segments in post request:
@mchinand Yes. It is only key value of 10bytes without value. Such controller REST API and recommendations from developers. Digit does not matter.
Right, but the length of the data strings is not the same yet you set the same content-length in the header for both of them.
-
@mchinand All working cases have string with 10 bytes length. Can you provide example of your idea?
-
@vicsoftware said in Prevent multiple TCP segments in post request:
@mchinand All working cases have string with 10 bytes length. Can you provide example of your idea?
from your post above:
curl -X POST -d "\"00000001\"="
and
QString data{ "\"00000002\"" };
-
@mchinand
Content length used by REST API to extract string from data.So first 10 bytes of these lines will have same content?
curl -X POST -d "\"00000001\""
and
QString data{ "\"00000001\"" }; -
Here is from controller manual: