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