This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TM4C129ENCPDT: HTTP POST in TIRTOS

Part Number: TM4C129ENCPDT

Hi,

HTTP client GET example of the TIRTOS 2.16.00.08 is working on my board.

I need to implement HTTP client POST also.

I modified the HTTP GET example as follows for testing the HTTP POST.

 

Void httpTask(UArg arg0, UArg arg1)
{
bool moreFlag = false;
char data[64];
int ret;
int len;
struct sockaddr_in addr;
char postdata = "hello" ;

HTTPCli_Field fields[3] = {
{ HTTPStd_FIELD_NAME_HOST, HOSTNAME },
{ HTTPStd_FIELD_NAME_USER_AGENT, USER_AGENT },
{ NULL, NULL }
};

System_printf("Sending a HTTP POST request to '%s'\n", HOSTNAME);
System_flush();

HTTPCli_construct(&cli);

HTTPCli_setRequestFields(&cli, fields);

ret = HTTPCli_initSockAddr((struct sockaddr *)&addr, HOSTNAME, 0);
if (ret < 0) {
printError("httpTask: address resolution failed", ret);
}

ret = HTTPCli_connect(&cli, (struct sockaddr *)&addr, 0, NULL);
if (ret < 0) {
printError("httpTask: connect failed", ret);
}

ret = HTTPCli_sendRequest(&cli, HTTPStd_POST, REQUEST_URI, false);
if (ret < 0) {
printError("httpTask: POST init failed", ret);

}
ret = HTTPCli_sendField(&cli, HTTPStd_FIELD_NAME_CONTENT_TYPE,"text/plain", false);
if (ret == 0) {
System_printf("httpTask: send field done\n", ret);
}

ret=HTTPCli_sendField(&cli, HTTPStd_FIELD_NAME_CONTENT_LENGTH, "5", false);

ret = HTTPCli_sendRequestBody(&cli,"hello",5);

//"{\"test\":\"1\"}"

// System_printf("{\"test\":\"1\"}");//"{\"test\":\"1\"}"


if (ret == 0) {
System_printf("httpTask: send body done\n", ret);
}

ret = HTTPCli_getResponseStatus(&cli);
if (ret != HTTPStd_OK) {
printError("httpTask: cannot get status", ret);
}

System_printf("HTTP Response Status Code: %d\n", ret);

ret = HTTPCli_getResponseField(&cli, data, sizeof(data), &moreFlag);

if (ret != HTTPCli_FIELD_ID_END) {
printError("httpTask: response field processing failed", ret);
}

len = 0;
do {
ret = HTTPCli_readResponseBody(&cli, data, sizeof(data), &moreFlag);
if (ret < 0) {
printError("httpTask: response body processing failed", ret);
}

len += ret;
} while (moreFlag);

System_printf("Recieved %d bytes of payload\n", len);
System_flush();

HTTPCli_disconnect(&cli);
HTTPCli_destruct(&cli);
}

But the HTTP POST does not become success, I am getting following error message

00009.000 TcpTimeoutRexmt: Retransmit Timeout
httpTask: send field done
Error! code = -104, desc = httpTask: cannot get status