esp32 http请求内存不断减少问题

一次esp32 http请求内存不断减少问题的解决过程

现象

从网上复制了一段http请求的代码,功能是通的,但发现每请求一次,内存就减少10多kb,很快就内存不足重启了。
一开始以为是cjson解释动作时没有注意释放,但检查并不是,最后参考官方的http client例程,才发现复制的代码最后只是简单使用了esp_http_client_close(client),并没有使用官方例程的esp_http_client_cleanup(client)方法。
esp_http_client_cleanup方法其实先调用了esp_http_client_close,然后再对所有相关缓存使用了free()释放。
所以以后只要在任务或者是定时里面不断调用http client的话,应该使用esp_http_client_cleanup方法。
在此记录一下

static void http_redirect_to_https(void)
{
    esp_http_client_config_t config = {
        .url = "http://httpbin.org/redirect-to?url=https%3A%2F%2Fwww.howsmyssl.com",
        .event_handler = _http_event_handler,
    };
    esp_http_client_handle_t client = esp_http_client_init(&config);
    esp_err_t err = esp_http_client_perform(client);

    if (err == ESP_OK) {
        ESP_LOGI(TAG, "HTTP redirect to HTTPS Status = %d, content_length = %lld",
                esp_http_client_get_status_code(client),
                esp_http_client_get_content_length(client));
    } else {
        ESP_LOGE(TAG, "Error perform http request %s", esp_err_to_name(err));
    }
    esp_http_client_cleanup(client);
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
ESP32是一款功能强大的开发板,可以通过编程来发送HTTP请求。为了发送HTTP请求,我们需要使用ESP32的WiFi功能和HTTP客户端库。 首先,我们需要初始化ESP32的WiFi模块并连接到无线网络。我们可以使用WiFi类的begin()方法来初始化WiFi,然后使用WiFi类的connect()方法连接到无线网络。 接下来,我们需要导入HTTP客户端库。ESP32提供了一个名为HTTPClient的库,可以用来发送HTTP请求。 一旦我们连接到了无线网络,并导入了HTTPClient库,我们就可以准备发送HTTP请求了。为了发送请求,我们需要一个URL和一个HTTP请求方法。 我们可以使用HTTPClient对象的begin()方法来设置URL和请求方法。然后,我们可以使用addHeader()方法来添加任何需要的请求头。然后,我们可以使用send()方法来发送HTTP请求。 最后,我们可以使用getResponseBody()方法来获取HTTP响应的正文。我们还可以使用getHeaders()方法查看响应的头部信息。 发送完HTTP请求后,我们可以使用 HTTPClient的end()方法来释放资源,并断开与服务器的连接。 总结起来,要在ESP32上发送HTTP请求,我们需要初始化WiFi模块并连接到无线网络,导入HTTP客户端库,设置URL和请求方法,添加任何需要的请求头,发送HTTP请求,获取响应的正文和头部信息,然后释放资源和断开连接。通过编写适当的代码,我们可以在ESP32上实现发送HTTP请求的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值