+ #if USE_MALLOC_DATA_SIZE
+ status_code = esp_http_client_get_status_code(http_client);//获取HTTP响应状态码,返回值为状态码的整数值,例如200表示请求成功,404表示资源未找到等
+ content_len = esp_http_client_get_content_length(http_client);//获取HTTP响应体的长度,返回值为响应体的字节数,如果返回值小于0表示获取响应体长度失败
+ ESP_LOGI(HTTP_TAG, "http_read_buff malloc is status_code %d content_len %d\n",status_code,content_len);
+ if(status_code == 200)
+ {
+ char *json_buf = malloc(HTTP_CONTENT_AMX_LEN+1);
+ if(json_buf == NULL)
+ {
+ result=2;
+ ESP_LOGI(HTTP_TAG, "http_read_buff malloc is failed\n");
+ }else{
+ int total_read = 0;
+ int read_len;
+ memset(output_buffer, 0x00, sizeof(output_buffer));
+ // 分段读取,拼到一次性申请的 buffer 里
+ while ((read_len = esp_http_client_read_response(http_client, output_buffer, HTTP_CHUNK_SIZE)) > 0)
+ {
+ if (total_read + read_len > HTTP_CONTENT_AMX_LEN)
+ {
+ break; // 防越界
+ }
+ memcpy(json_buf + total_read, output_buffer, read_len);
+ total_read += read_len;
+ }
+
+ json_buf[total_read] = '\0';
+ ESP_LOGI(HTTP_TAG, "http_read_buff cert data total is failed %d\n",total_read);
+ cJSON* root_base = cJSON_Parse(json_buf);
+ if(root_base != NULL)
+ {
+ cJSON* pData = cJSON_GetObjectItem(root_base,"data");
+ if(pData != NULL)
+ {
+ // cJSON* pDevice_id = cJSON_GetObjectItem(pData,"deviceId");
+ // {
+ // "serialNumber":"PXN1LJ1QUR078E",
+ // "firmwareVersion":1.0,
+ // "status":4,
+ // "rssi":-80,
+ // "clientcrtUrl":"https://pxn-iot.s3.us-east-2.amazonaws.com/iot01/2026/04/02/69ce08f0bfcbe4e5bea9a6a5.crt",
+ // "clientkeyUrl":"https://pxn-iot.s3.us-east-2.amazonaws.com/iot01/2026/04/02/69ce08b3bfcbe4e5bea9a6a4.key",
+ // "mosquittoorgcrtUrl":"https://pxn-iot.s3.us-east-2.amazonaws.com/iot01/2026/04/02/69ce0836bfcbe4e5bea9a6a3.crt",
+ // "mqttUrl":"mqtts://a3l6aw6tvk7fvq-ats.iot.us-east-1.amazonaws.com:8883",
+ // "macAddress":"1",
+ // "pid":"0xA00B"
+ // }
+ pClientCrt = cJSON_GetObjectItem(pData,"clientcrtUrl");
+ pClientkey = cJSON_GetObjectItem(pData,"clientkeyUrl");
+ pServerCrt = cJSON_GetObjectItem(pData,"mosquittoorgcrtUrl");
+ pMqttSubUrl = cJSON_GetObjectItem(pData,"mqttUrl");
+
+ memset(&http_get_cert_task_param.url[SSL_CLIENT_CRT][0], 0x00, sizeof(http_get_cert_task_param.url[SSL_CLIENT_CRT]));
+ memset(&http_get_cert_task_param.url[SSL_CLIENT_KEY][0], 0x00, strlen(http_get_cert_task_param.url[SSL_CLIENT_KEY]));
+ memset(&http_get_cert_task_param.url[SSL_SERVER_CRT][0], 0x00, strlen(http_get_cert_task_param.url[SSL_SERVER_CRT]));
+ //get the value
+ if((pClientCrt != NULL && cJSON_IsString(pClientCrt)) &&
+ (pClientkey != NULL && cJSON_IsString(pClientkey)) &&
+ (pServerCrt != NULL && cJSON_IsString(pServerCrt)) &&
+ (pMqttSubUrl != NULL && cJSON_IsString(pMqttSubUrl)))
+ {
+ ESP_LOGI(HTTP_TAG, "get 证书 mqtt 地址\n");
+ // common_setting.net_pairing_info.device_id = pDevice_id->valueint;
+ // common_setting.net_pairing_info.device_id_flag = 1;
+ result = 1;
+
+ memcpy(&http_get_cert_task_param.url[SSL_CLIENT_CRT][0], pClientCrt->valuestring, strlen((const char*)pClientCrt->valuestring));
+ memcpy(&http_get_cert_task_param.url[SSL_CLIENT_KEY][0], pClientkey->valuestring, strlen((const char*)pClientkey->valuestring));
+ memcpy(&http_get_cert_task_param.url[SSL_SERVER_CRT][0], pServerCrt->valuestring, strlen((const char*)pServerCrt->valuestring));
+
+ uint16_t mqtt_url_len = strlen((const char*)pMqttSubUrl->valuestring);
+ if(mqtt_url_len > MQTT_SUB_URL_MAX_LEN)
+ {
+ mqtt_url_len=MQTT_SUB_URL_MAX_LEN;
+ }
+
+ memset(common_setting.net_pairing_info.mqtt_sub_url, 0x00, sizeof(common_setting.net_pairing_info.mqtt_sub_url));
+ memcpy(common_setting.net_pairing_info.mqtt_sub_url, pMqttSubUrl->valuestring, mqtt_url_len);
+ common_setting.net_pairing_info.mqtt_sub_url_length = mqtt_url_len;
+ common_setting.net_pairing_info.mqtt_sub_url_flag = 1;
+
+
+ memset(common_storage.net_info.mqtt_sub_url, 0x00, sizeof(common_storage.net_info.mqtt_sub_url));
+ memcpy(common_storage.net_info.mqtt_sub_url, pMqttSubUrl->valuestring,mqtt_url_len);
+ common_storage.net_info.mqtt_sub_url[mqtt_url_len]='\0';
+ common_storage.net_info.mqtt_url_len=mqtt_url_len;
+
+ //保存mqtt 地址
+ //UF_OFFSET_USER_CONFIG_INFO_ADDR, UF_OFFSET_USER_CONFIG_INFO_FLAG, &common_storage.net_info, sizeof(NET_INFO_T)) != ESP_OK
+ if(User_Flash_Write_With_Flag(UF_OFFSET_USER_CONFIG_INFO_ADDR, UF_OFFSET_USER_CONFIG_INFO_FLAG, &common_storage.net_info, sizeof(NET_INFO_T)) == ESP_OK)
+ {
+ ESP_LOGE(HTTP_TAG, "flash write mqtt_sub_url success: %s\n",common_storage.net_info.mqtt_sub_url);
+ err = ESP_OK;
+ }
+ else
+ {
+ ESP_LOGE(HTTP_TAG, "flash write mqtt_sub_url fail: %s\n",common_storage.net_info.mqtt_sub_url);
+ err = ESP_FAIL;
+ }
+
+ }
+ else
+ {
+ result = 2;
+ }
+ }
+ else
+ {
+ result = 3;
+ }
+ cJSON_Delete(root_base);
+ }
+ else
+ {
+ result = 4;
+ ESP_LOGI(HTTP_TAG, "root_base is null\n");
+ }
+ if(json_buf)
+ {
+ free(json_buf);
+ json_buf=NULL;
+ }
+ }
+ }
+
+ #else