Forráskód Böngészése

add:http添加对body的处理,完善header拼包

Dozingfiretruck 3 éve
szülő
commit
4c1559ff5d
1 módosított fájl, 24 hozzáadás és 4 törlés
  1. 24 4
      components/network/libhttp/luat_lib_http.c

+ 24 - 4
components/network/libhttp/luat_lib_http.c

@@ -65,15 +65,21 @@ static int32_t luat_lib_http_callback(void *data, void *param){
 			return -1;
     	}
 	}else if(event->ID == EV_NW_RESULT_CONNECT){
+		memset(http_ctrl->request_message, 0, HTTP_REQUEST_BUF_LEN_MAX);
 		if (http_ctrl->header){
 			snprintf(http_ctrl->request_message, HTTP_REQUEST_BUF_LEN_MAX, 
-					"%s %s HTTP/1.1\r\nHost: %s\r\n%s\r\n", 
+					"%s %s HTTP/1.1\r\nHost: %s\r\n%s", 
 					http_ctrl->method,http_ctrl->uri,http_ctrl->host,http_ctrl->header);
 		}else{
 			snprintf(http_ctrl->request_message, HTTP_REQUEST_BUF_LEN_MAX, 
-					"%s %s HTTP/1.1\r\nHost: %s\r\n\r\n", 
+					"%s %s HTTP/1.1\r\nHost: %s\r\n", 
 					http_ctrl->method,http_ctrl->uri,http_ctrl->host);
 		}
+		if (http_ctrl->body)
+		{
+			strncat(http_ctrl->header, http_ctrl->body, strlen(http_ctrl->body));
+		}
+		strncat(http_ctrl->header, "\r\n", 2);
 		LLOGD("http_ctrl->request_message:%s",http_ctrl->request_message);
 		uint32_t tx_len = 0;
 		network_tx(http_ctrl->netc, http_ctrl->request_message, strlen(http_ctrl->request_message), 0, http_ctrl->ip_addr.is_ipv6?NULL:&(http_ctrl->ip_addr), NULL, &tx_len, 0);
@@ -107,8 +113,19 @@ static int32_t luat_lib_http_callback(void *data, void *param){
 }
 
 static int http_add_header(luat_http_ctrl_t *http_ctrl, const char* name, const char* value){
-	LLOGD("http_add_header name:%s value:%s",name,value);
-	
+	// LLOGD("http_add_header name:%s value:%s",name,value);
+	if (http_ctrl->header){
+		http_ctrl->header = luat_heap_realloc(http_ctrl->header, strlen(http_ctrl->header)+strlen(name)+strlen(value)+1);
+		strncat(http_ctrl->header, name, strlen(name));
+		strncat(http_ctrl->header, ":", 1);
+		strncat(http_ctrl->header, value, strlen(value));
+		strncat(http_ctrl->header, "\r\n", 2);
+	}else{
+		http_ctrl->header = luat_heap_malloc(strlen(name)+strlen(value)+1);
+		memset(http_ctrl->header, 0, strlen(name)+strlen(value)+1);
+		sprintf(http_ctrl->header, "%s:%s\r\n", name,value);
+	}
+	// LLOGD("http_ctrl->header:%s",http_ctrl->header);
 }
 
 static int http_set_url(luat_http_ctrl_t *http_ctrl) {
@@ -235,10 +252,13 @@ static int l_http_request(lua_State *L) {
 
 		lua_pushstring(L, "body");
 		if (LUA_TSTRING == lua_gettable(L, 3)) {
+			char body_len[6] = {0}; 
 			const char *body = luaL_checklstring(L, -1, len);
 			http_ctrl->body = luat_heap_malloc(len + 1);
 			memset(http_ctrl->body, 0, len + 1);
 			memcpy(http_ctrl->body, body, len);
+			sprintf(body_len, "%d",len);
+			http_add_header(http_ctrl,"Content-Length",body_len);
 			LLOGD("body:%s",http_ctrl->body);
 		}
 		lua_pop(L, 1);