Files
2025-12-03 11:12:34 +08:00

126 lines
4.0 KiB
C

#ifdef SUPPORT_MS_EXTENSIONS
#pragma bss_seg(".net_interface.data.bss")
#pragma data_seg(".net_interface.data")
#pragma const_seg(".net_interface.text.const")
#pragma code_seg(".net_interface.text")
#endif
#include "net_http.h"
#if NET_INTERFACE_EN
#define LOG_TAG_CONST NET_INTERFACE
#define LOG_TAG "[NET_INTERFACE_HTTP]"
#define LOG_ERROR_ENABLE
#define LOG_DEBUG_ENABLE
#define LOG_INFO_ENABLE
#define LOG_CLI_ENABLE
#include "debug.h"
int net_http_get_request(char *url, char **response)
{
int error = 0;
http_body_obj http_body_buf;
log_info("wt get url: %s\n", url);
httpcli_ctx *ctx = (httpcli_ctx *)net_interface_calloc(1, sizeof(httpcli_ctx));
if (!ctx) {
log_error("calloc failed\n");
return -1;
}
memset(&http_body_buf, 0x0, sizeof(http_body_obj));
http_body_buf.recv_len = 0;
http_body_buf.buf_len = 2 * 1024;
http_body_buf.buf_count = 1;
http_body_buf.p = (char *)net_interface_malloc(http_body_buf.buf_len * http_body_buf.buf_count);
if (!http_body_buf.p) {
net_interface_free(ctx);
ctx = NULL;
return -1;
}
ctx->url = url;
ctx->timeout_millsec = 5000;
ctx->priv = &http_body_buf;
ctx->connection = "close";
ctx->data_format = "application/json";
error = httpcli_get(ctx);
if (error != HERROR_OK) {
log_error("get failed\n");
} else {
if (http_body_buf.recv_len > 0) {
log_info("\nreceive %d bytes from(%s)\n", http_body_buf.recv_len, url);
log_info("%s\n", http_body_buf.p);
if (response != NULL) {
*response = net_interface_malloc(http_body_buf.recv_len + 1);
if (*response == NULL) {
log_error("Memory allocation failed for response\n");
error = -1;
} else {
memcpy(*response, http_body_buf.p, http_body_buf.recv_len);
(*response)[http_body_buf.recv_len] = '\0';
log_info("Response copied to external pointer, length: %d\n", http_body_buf.recv_len);
}
}
}
}
httpcli_close(ctx);
if (http_body_buf.p) {
net_interface_free(http_body_buf.p);
}
if (ctx) {
net_interface_free(ctx);
}
return error;
}
int net_http_post_request(char *url, char **response)
{
int ret = 0;
http_body_obj http_body_buf;
httpcli_ctx *ctx = (httpcli_ctx *)net_interface_calloc(1, sizeof(httpcli_ctx));
if (!ctx) {
log_error("calloc failed\n");
return -1;
}
memset(&http_body_buf, 0x0, sizeof(http_body_obj));
http_body_buf.recv_len = 0;
http_body_buf.buf_len = 2 * 1024;
http_body_buf.buf_count = 1;
http_body_buf.p = (char *)net_interface_malloc(http_body_buf.buf_len * http_body_buf.buf_count);
if (!http_body_buf.p) {
net_interface_free(ctx);
return -1;
}
ctx->url = url;
ctx->timeout_millsec = 5000;
ctx->priv = &http_body_buf;
ctx->connection = "close";
ctx->data_format = "application/json";
ret = httpcli_post(ctx);
if (ret != HERROR_OK) {
log_error("HTTP POST request failed\n");
} else {
if (http_body_buf.recv_len > 0) {
log_info("\nReceived %d Bytes from (%s)\n", http_body_buf.recv_len, url);
if (response != NULL) {
*response = net_interface_malloc(http_body_buf.recv_len + 1);
if (*response == NULL) {
log_error("Memory allocation failed for response\n");
ret = -1;
} else {
memcpy(*response, http_body_buf.p, http_body_buf.recv_len);
(*response)[http_body_buf.recv_len] = '\0';
log_info("Response copied to external pointer, length: %d\n", http_body_buf.recv_len);
}
}
}
}
httpcli_close(ctx);
if (http_body_buf.p) {
net_interface_free(http_body_buf.p);
}
if (ctx) {
net_interface_free(ctx);
}
return ret;
}
#endif //NET_INTERFACE_EN