【添加】头部数据拼接接口,适用于 webclient_request 接口

【添加】webclient_request 接口相关的 GET/POST 请求示例

Signed-off-by: chenyong <1521761801@qq.com>
master
chenyong 6 years ago
parent 568810ff9d
commit 20aad8f250

@ -128,6 +128,7 @@ const char *webclient_header_fields_get(struct webclient_session *session, const
/* send HTTP POST/GET request, and get response data */ /* send HTTP POST/GET request, and get response data */
int webclient_response(struct webclient_session *session, unsigned char **response); int webclient_response(struct webclient_session *session, unsigned char **response);
int webclient_request(const char *URI, const char *header, const char *post_data, unsigned char **response); int webclient_request(const char *URI, const char *header, const char *post_data, unsigned char **response);
int webclient_request_header_add(char **request_header, const char *fmt, ...);
int webclient_resp_status_get(struct webclient_session *session); int webclient_resp_status_get(struct webclient_session *session);
int webclient_content_length_get(struct webclient_session *session); int webclient_content_length_get(struct webclient_session *session);

@ -74,7 +74,7 @@ int webclient_get_test(int argc, char **argv)
goto __exit; goto __exit;
} }
rt_kprintf("webclient GET request response data :\n"); rt_kprintf("get response data: \n");
content_length = webclient_content_length_get(session); content_length = webclient_content_length_get(session);
if (content_length < 0) if (content_length < 0)
@ -140,7 +140,65 @@ __exit:
return ret; return ret;
} }
int webclient_get_smpl_test(int argc, char **argv)
{
char *URI, *request;
int index;
if (argc == 1)
{
URI = web_strdup(GET_LOCAL_URI);
if(URI == RT_NULL)
{
rt_kprintf("no memory for create URI buffer.\n");
return -1;
}
}
else if (argc == 2)
{
URI = web_strdup(argv[1]);
if(URI == RT_NULL)
{
rt_kprintf("no memory for create URI buffer.\n");
return -1;
}
}
else
{
rt_kprintf("webclient_get_smpl_test [URI] - webclient simplify GET request test.\n");
return -1;
}
if (webclient_request(URI, RT_NULL, RT_NULL, (unsigned char **)&request) < 0)
{
rt_kprintf("webclient send get request failed.");
web_free(URI);
return -1;
}
rt_kprintf("get response data: \n");
for (index = 0; index < rt_strlen(request); index++)
{
rt_kprintf("%c", request[index]);
}
rt_kprintf("\n");
if (request)
{
web_free(request);
}
if (URI)
{
web_free(URI);
}
return 0;
}
#ifdef FINSH_USING_MSH #ifdef FINSH_USING_MSH
#include <finsh.h> #include <finsh.h>
MSH_CMD_EXPORT_ALIAS(webclient_get_test, web_get_test, web_get_test [URI] webclient GET request test); MSH_CMD_EXPORT_ALIAS(webclient_get_test, web_get, web_get [URI] webclient GET request test);
MSH_CMD_EXPORT_ALIAS(webclient_get_smpl_test, web_get_smpl, web_get_smpl [URI] webclient simplify GET request test);
#endif /* FINSH_USING_MSH */ #endif /* FINSH_USING_MSH */

@ -81,7 +81,7 @@ int webclient_post_test(int argc, char **argv)
goto __exit; goto __exit;
} }
rt_kprintf("webclient POST request response data :\n"); rt_kprintf("post response data: \n");
do do
{ {
bytes_read = webclient_read(session, buffer, POST_RESP_BUFSZ); bytes_read = webclient_read(session, buffer, POST_RESP_BUFSZ);
@ -117,7 +117,72 @@ __exit:
return ret; return ret;
} }
int webclient_post_smpl_test(int argc, char **argv)
{
char *URI, *request, *header = RT_NULL;
int index;
if (argc == 1)
{
URI = web_strdup(POST_LOCAL_URI);
if(URI == RT_NULL)
{
rt_kprintf("no memory for create URI buffer.\n");
return -1;
}
}
else if (argc == 2)
{
URI = web_strdup(argv[1]);
if(URI == RT_NULL)
{
rt_kprintf("no memory for create URI buffer.\n");
return -1;
}
}
else
{
rt_kprintf("webclient_post_smpl_test [URI] - webclient simplify POST request test.\n");
return -1;
}
webclient_request_header_add(&header, "Content-Length: %d\r\n", strlen(post_data));
webclient_request_header_add(&header, "Content-Type: application/octet-stream\r\n");
if (webclient_request(URI, (const char *)header, post_data, (unsigned char **)&request) < 0)
{
rt_kprintf("webclient send post request failed.");
web_free(header);
web_free(URI);
return -1;
}
rt_kprintf("post response data: \n");
for (index = 0; index < rt_strlen(request); index++)
{
rt_kprintf("%c", request[index]);
}
rt_kprintf("\n");
if (header)
{
web_free(header);
}
if (URI)
{
web_free(URI);
}
if (request)
{
web_free(request);
}
return 0;
}
#ifdef FINSH_USING_MSH #ifdef FINSH_USING_MSH
#include <finsh.h> #include <finsh.h>
MSH_CMD_EXPORT_ALIAS(webclient_post_test, web_post_test, webclient_post_test [URI] - webclient POST request test.); MSH_CMD_EXPORT_ALIAS(webclient_post_test, web_post, web_post [URI] - webclient POST request test.);
MSH_CMD_EXPORT_ALIAS(webclient_post_smpl_test, web_post_smpl, web_post_smpl [URI] - webclient simplify POST request test.);
#endif /* FINSH_USING_MSH */ #endif /* FINSH_USING_MSH */

@ -1448,8 +1448,8 @@ int webclient_response(struct webclient_session *session, unsigned char **respon
int result_sz; int result_sz;
result_sz = session->content_length; result_sz = session->content_length;
response_buf = web_malloc(result_sz + 1); response_buf = web_calloc(1, result_sz + 1);
if (!response_buf) if (response_buf == RT_NULL)
{ {
return -WEBCLIENT_NOMEM; return -WEBCLIENT_NOMEM;
} }
@ -1481,6 +1481,59 @@ int webclient_response(struct webclient_session *session, unsigned char **respon
return total_read; return total_read;
} }
/**
* add request(GET/POST) header data.
*
* @param request_header add request buffer address
* @param fmt fields format
*
* @return <=0: add header failed
* >0: add header data size
*/
int webclient_request_header_add(char **request_header, const char *fmt, ...)
{
rt_int32_t length, header_length;
char *header;
va_list args;
RT_ASSERT(request_header);
if (*request_header == RT_NULL)
{
header = rt_calloc(1, WEBCLIENT_HEADER_BUFSZ);
if (header == RT_NULL)
{
LOG_E("No memory for webclient request header add.");
return RT_NULL;
}
*request_header = header;
}
else
{
header = *request_header;
}
va_start(args, fmt);
header_length = rt_strlen(header);
length = rt_vsnprintf(header + header_length, WEBCLIENT_HEADER_BUFSZ - header_length, fmt, args);
if (length < 0)
{
LOG_E("add request header data failed, return length(%d) error.", length);
return -WEBCLIENT_ERROR;
}
va_end(args);
/* check header size */
if (rt_strlen(header) >= WEBCLIENT_HEADER_BUFSZ)
{
LOG_E("not enough request header data size(%d)!", WEBCLIENT_HEADER_BUFSZ);
return -WEBCLIENT_ERROR;
}
return length;
}
/** /**
* send request(GET/POST) to server and get response data. * send request(GET/POST) to server and get response data.
* *
@ -1512,6 +1565,7 @@ int webclient_request(const char *URI, const char *header, const char *post_data
if (post_data == RT_NULL) if (post_data == RT_NULL)
{ {
/* send get request */
session = webclient_session_create(WEBCLIENT_HEADER_BUFSZ); session = webclient_session_create(WEBCLIENT_HEADER_BUFSZ);
if (session == RT_NULL) if (session == RT_NULL)
{ {
@ -1521,7 +1575,15 @@ int webclient_request(const char *URI, const char *header, const char *post_data
if (header != RT_NULL) if (header != RT_NULL)
{ {
rt_strncpy(session->header->buffer, header, rt_strlen(header)); char *header_str, *header_ptr;
int header_line_length;
for(header_str = (char *)header; (header_ptr = rt_strstr(header_str, "\r\n")) != RT_NULL; )
{
header_line_length = header_ptr + rt_strlen("\r\n") - header_str;
webclient_header_fields_add(session, "%.*s", header_line_length, header_str);
header_str += header_line_length;
}
} }
if (webclient_get(session, URI) != 200) if (webclient_get(session, URI) != 200)
@ -1539,6 +1601,7 @@ int webclient_request(const char *URI, const char *header, const char *post_data
} }
else else
{ {
/* send post request */
session = webclient_session_create(WEBCLIENT_HEADER_BUFSZ); session = webclient_session_create(WEBCLIENT_HEADER_BUFSZ);
if (session == RT_NULL) if (session == RT_NULL)
{ {
@ -1548,12 +1611,24 @@ int webclient_request(const char *URI, const char *header, const char *post_data
if (header != RT_NULL) if (header != RT_NULL)
{ {
rt_strncpy(session->header->buffer, header, rt_strlen(header)); char *header_str, *header_ptr;
int header_line_length;
for(header_str = (char *)header; (header_ptr = rt_strstr(header_str, "\r\n")) != RT_NULL; )
{
header_line_length = header_ptr + rt_strlen("\r\n") - header_str;
webclient_header_fields_add(session, "%.*s", header_line_length, header_str);
header_str += header_line_length;
}
} }
else
if (rt_strstr(session->header->buffer, "Content-Length") == RT_NULL)
{ {
/* build header for upload */
webclient_header_fields_add(session, "Content-Length: %d\r\n", rt_strlen(post_data)); webclient_header_fields_add(session, "Content-Length: %d\r\n", rt_strlen(post_data));
}
if (rt_strstr(session->header->buffer, "Content-Type") == RT_NULL)
{
webclient_header_fields_add(session, "Content-Type: application/octet-stream\r\n"); webclient_header_fields_add(session, "Content-Type: application/octet-stream\r\n");
} }
@ -1571,11 +1646,6 @@ int webclient_request(const char *URI, const char *header, const char *post_data
} }
} }
if (header != RT_NULL)
{
rt_strncpy(session->header->buffer, header, rt_strlen(header));
}
__exit: __exit:
if (session) if (session)
{ {

Loading…
Cancel
Save