Issue in Using Http post request

Hi,
I am using Http post request to send data to server.

My JSON Payload

#define Payload_ToBeSend “POST /abcd HTTP/1.1\r\nHost: example.in:1234\r\nAccept: / \r\nContent-Length: 117\r\nContent-Type: application/json\r\n{“qrData”:“qrData”,“type”:“type”,“latitude”: 56.570073,“longitude”: 45.800257,“Name”:“New Name”}\0”

I also am Setting the headers ,URL —>
Ql_sprintf(strAT, “AT+QHTTPCFG=“contextid”,%d\0”, len);
Ql_sprintf(strAT, “AT+QHTTPCFG=“requestheader”,%d\0”, len);
Ql_sprintf(strAT, “AT+QHTTPURL=%d,%d\0”, len, 120);

To Post Data ---->
ret = RIL_HTTP_RequestToPost(Payload_ToBeSend, Ql_strlen((char*)Payload_ToBeSend));
APP_DEBUG("<-- Send post-request, postMsg=%s, ret=%d -->\r\n", (char*)Payload_ToBeSend, ret);

Value of “ret” is -1 in above case.My GET request is working Fine without any payload.I am using Example : EXAMPLE_HTTP

Hi Raj

Could you share us the fucntion of RIL_HTTP_RequestToPost in EXAMPLE_HTTP and the exact paramter value in following command?
Ql_sprintf(strAT, “AT+QHTTPCFG=“contextid”,%d\0”, len);
Ql_sprintf(strAT, “AT+QHTTPCFG=“requestheader”,%d\0”, len);
Ql_sprintf(strAT, “AT+QHTTPURL=%d,%d\0”, len, 120);

Best Regards,

Hi Willie,
My RIL_HTTP_RequestToPost in EXAMPLE_HTTP --------------->

s32 RIL_HTTP_RequestToPost(char* strPostMsg, u16 len)
{
s32 retRes;
s32 errCode = RIL_AT_FAILED;
char strAT[30];

if (!strPostMsg)
{
    return RIL_AT_INVALID_PARAM;
}
http_post_msg = strPostMsg;
http_post_msg_len = len;
m_httpAction = HTTP_ACTION_POST_REQ;
Ql_sprintf(strAT, "AT+QHTTPPOST=%d,120,120\0", len);
retRes = Ql_RIL_SendATCmd(strAT, Ql_strlen(strAT), ATRsp_QHTTP_Handler, &errCode, 0);
if (retRes != RIL_AT_SUCCESS)
{
    if (RIL_AT_FAILED == errCode)
    {
        return retRes;
    } else {
        return errCode;
    }
}
return retRes;

}

Parameters in------->len =1
Ql_sprintf(strAT, “AT+QHTTPCFG=“contextid”,%d\0”, len);// len=1
Ql_sprintf(strAT, “AT+QHTTPCFG=“requestheader”,%d\0”, len);// len=1

Code to QHTTPURL—>
ret = RIL_HTTP_SetServerURL(HTTP_URL_ADDR, Ql_strlen(HTTP_URL_ADDR));//#define HTTP_URL_ADDR “http://example.in\0”

s32 RIL_HTTP_SetServerURL(char* strURL, u16 len)
{
s32 retRes;
s32 errCode = RIL_AT_FAILED;
char strAT[30];

if (!strURL)
{
    return RIL_AT_INVALID_PARAM;
}
http_url_addr = strURL;
http_url_addr_len = len;
m_httpAction = HTTP_ACTION_SETRUL;
Ql_sprintf(strAT, "AT+QHTTPURL=%d,%d\0", len, 120);
retRes = Ql_RIL_SendATCmd(strAT, Ql_strlen(strAT), ATRsp_QHTTP_Handler, &errCode, 0);
if (retRes != RIL_AT_SUCCESS)
{
    if (RIL_AT_FAILED == errCode)
    {
        return retRes;
    } else {
        return errCode;
    }
}
return retRes; 

}

Are you able to retrieve the UART output after RIL_HTTP_RequestToPost was excuted? So we can get the detail error code for diagnose?

In addition, please try again with adding one more “\r\n” before body. e.g.:
nContent-Type: application/json\r\n\r\n{“qrData”:“qrD

Hi ,
I am getting an error code - —>
+CME ERROR : 3804 (HTTP GET NO RESPONSE)
adding one more “\r\n” before body did not helped

Hi Raj,

ERROR 3804 is usually occurred at sending AT+QHTTPREAD without HTTPGET or HTTPPOST request. You’d better to get the full UART input and output log.
Additional, did you program wait “CONNECT” coming out and then send httpbody?
image
Best Regards,

Hi Willie ,

When i checked my complete logs my AT+QHTTPPOST is throwing an +CME ERROR: 3822.

Hi Raj,

You were able to get error 3822 from AT+QHTTPPOST. That indicates that HTTP connection is ok. But HTTP server responsed HTTP40x or 50x for your post request.
You may just need to check your POST content.

Best Regards,