esp32 idf 使用http访问json直接拼接content_length = -1

 CMakeLists.txt添加网络请求库 REQUIRES  esp_http_client

 效果图

D (14235) HTTP_CLIENT: content_length = -1 需要直接拼接content_length才能打印

#include <stdio.h>
#include <string.h>
#include "esp_log.h"
#include "esp_system.h"
#include "esp_event.h"
#include "esp_netif.h"
#include "nvs_flash.h" 
#include "esp_http_client.h"static const char *TAG = "HTTP_CLIENT";#define MAX_HTTP_OUTPUT_BUFFER 2048static char local_response_buffer[MAX_HTTP_OUTPUT_BUFFER] = {0};// HTTP 回调处理函数
esp_err_t _http_event_handler(esp_http_client_event_t *evt) {switch (evt->event_id) {case HTTP_EVENT_ON_DATA:// 直接拼接数据(无论是否 chunked)if (evt->data_len > 0 && evt->data != NULL) {strncat(local_response_buffer, (char *)evt->data, evt->data_len);// size_t len = strlen(local_response_buffer);// size_t copy_len = MIN(evt->data_len, MAX_HTTP_OUTPUT_BUFFER - len - 1);// strncat(local_response_buffer, (char *)evt->data, copy_len);}break;default:break;}return ESP_OK;
}void http_get_and_parse_json(char *url) {// 初始化NVSesp_err_t ret = nvs_flash_init();if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {ESP_ERROR_CHECK(nvs_flash_erase());ret = nvs_flash_init();}ESP_ERROR_CHECK(ret);// 连接WIFI(使用 examples 中的 common 配置)//如果你没有连接wifi,需要实现连接wifi的代码// ESP_ERROR_CHECK(esp_netif_init());// ESP_ERROR_CHECK(esp_event_loop_create_default());// ESP_ERROR_CHECK(example_connect()); // 自动连接WiFi的代码这里省略// 配置HTTP客户端esp_http_client_config_t config = {.url = url,  // 你要访问的网页URL.event_handler = _http_event_handler,.user_data = local_response_buffer, // 将缓冲区传入回调};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 GET Status = %d, content_length = %d",//          esp_http_client_get_status_code(client),//          esp_http_client_get_content_length(client));ESP_LOGI(TAG, "Response:\n%s", local_response_buffer);} else {ESP_LOGE(TAG, "HTTP GET request failed: %s", esp_err_to_name(err));}esp_http_client_cleanup(client);
}

头文件.h

#ifndef HTTP_JSON_CLIENT_H
#define HTTP_JSON_CLIENT_H#ifdef __cplusplus
extern "C" {
#endif/*** @brief 使用 HTTP GET 请求指定 URL 并解析返回的 JSON 数据* * @param url 目标请求地址,如 "http://yourserver.com/api/data"*/
void http_get_and_parse_json(const char *url);#ifdef __cplusplus
}
#endif#endif // HTTP_JSON_CLIENT_H

 测试php

<?php
$data = ['status' => 'ok','message' => '你好 ESP32!'
];$json = json_encode($data, JSON_UNESCAPED_UNICODE);
header('Content-Type: application/json');
header('Content-Length: ' . strlen($json));
header('Connection: close');  // 防止 keep-alive 导致 chunked
echo $json;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/92367.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/92367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Github】下载使用github上的源代码

一、安装Anoconda 二、安装 Git &#xff08;1&#xff09;安装 方法 1&#xff1a;通过 Git 官网安装​ 下载 Git for Windows&#xff1a;https://git-scm.com/download/win运行安装程序&#xff0c;​​确保勾选 "Add Git to PATH"​​&#xff08;重要&#…

Java 邂逅 WebSocket:解锁实时通信的无限可能​

在当今的互联网时代&#xff0c;实时通信已经成为许多应用不可或缺的功能。从在线聊天工具到实时游戏互动&#xff0c;从股票行情推送再到物联网数据传输&#xff0c;都对实时性有着极高的要求。而在 Java 技术栈中&#xff0c;WebSocket 技术的出现&#xff0c;为开发者打开了…

MySQL 核心知识点梳理(5)

目录 事务 MySQL事务的四大特性 ACID 原子性 持久性 隔离性 事务的隔离级别 读未提交 读已提交 可重复读 串行化 事务的隔离级别如何实现 MVCC 版本链 READVIEW 高可用 MySQL数据库的读写分离 主从复制 主从同步延迟怎么处理 分库策略 水平分库分表的策略…

借助AI学习开源代码git0.7之六write-tree

借助AI学习开源代码git0.7之六write-tree write-tree.c 的作用是根据当前的索引&#xff08;cache&#xff09;内容创建一个树&#xff08;tree&#xff09;对象&#xff0c;并将其写入Git的对象数据库。 树对象代表了项目在某个时间点的目录结构。 代码的主要逻辑&#xff1a;…

开源 python 应用 开发(八)图片比对

最近有个项目需要做视觉自动化处理的工具&#xff0c;最后选用的软件为python&#xff0c;刚好这个机会进行系统学习。短时间学习&#xff0c;需要快速开发&#xff0c;所以记录要点步骤&#xff0c;防止忘记。 链接&#xff1a; 开源 python 应用 开发&#xff08;一&#xf…

SeaTunnel 云仓连接器使用指南 | AI 助手解读系列

最近体验了一下 Deepwiki 的 AI 文档生成功能&#xff0c;本文展示其自动生成的《SeaTunnel 云端数据仓库连接器》文档内容&#xff0c;欢迎大家一起“挑刺捉虫”&#xff0c;看看 AI 写技术文档到底靠不靠谱&#xff1f; 本文档介绍了 Apache SeaTunnel 的云数据仓库连接器&a…

每日算法刷题Day51:7.21:leetcode 栈6道题,用时1h40min

二.进阶 1.套路 2.题目描述 1.给你一个字符串 s 。它可能包含任意数量的 * 字符。你的任务是删除所有的 * 字符。 当字符串还存在至少一个 * 字符时&#xff0c;你可以执行以下操作&#xff1a; 删除最左边的 * 字符&#xff0c;同时删除该星号字符左边一个字典序 最小的字…

网络基础DAY16-MSTP-VRRP

STP/RSTP的局限性1.所有VLAN共享一棵生成树 2.无法实现不同VLAN在多条Trunk链路上的负载分担 3.次优化二层路径。MSTP的基本概念及优势MSTP的定义MST域拥有相同MST配置标识的网桥构成的集合。 具体如何分辨是否是同一个域&#xff0c;就看域名&#xff0c;配置修订号&#xff0…

freertos关键函数理解 uxListRemove

//删除pxItemToRemove节点 UBaseType_t uxListRemove(ListItem_t *pxItemToRemove) { //The list item knows which list it is in. Obtain the list from the list item.//找到节点所在的链表//my_printf( "uxListRemove pxItemToRemove %#p\n", pxI…

C语言---番外篇(柔性数组)

前言&#xff1a; 由于这块内容所谓综合性比较高&#xff0c;有数组的知识&#xff0c;有结构体的知识&#xff0c;还有动态内存管理的知识&#xff0c;所以我就单独写一篇博客&#xff0c;此谓番外篇。 柔性数组的概念 定义在结构体的最后一个元素的位置且大小未知的数组就叫…

单片机的几种GPIO输入输出模型详解

模式选择汇总参考表&#xff1a;模式输出驱动输入阻抗默认状态典型应用场景推挽输出强驱动禁用可配置LED, SPI, 高速信号开漏输出弱驱动禁用低/悬空IC, 电平转换, 线与浮空输入禁用极高不确定外部强驱动信号上拉输入禁用中高高电平按键(接地型), 数字输入下拉输入禁用中高低电平…

深度解析ECharts.js:构建现代化数据可视化的利器

引言&#xff1a;数据可视化的新时代挑战 在数字化转型浪潮中&#xff0c;数据可视化已成为企业决策和用户体验的关键环节。面对海量数据的呈现需求&#xff0c;传统表格已无法满足用户对直观洞察的渴求。作为百度开源的JavaScript可视化库&#xff0c;ECharts.js凭借其强大的功…

从零构建实时通信引擎:Freeswitch源码编译与深度优化指南

一、构建工具&#xff1a;编译FreeSWITCH及其依赖库的基础 1. CMake2. Autoconf 二、汇编器&#xff1a;提升音视频处理性能 3. YASM / NASM 三、音视频编解码器&#xff1a;支撑实时媒体传输 4. Opus5. x264 (可选)6. libvpx / libvpx2 (可选) 四、多媒体框架与工具库&#xf…

网络原理 HTTP 和 HTTPS

目录 一 . HTTP 协议 二 . 抓包 三 . HTTP 请求 / 响应的基本格式 &#xff08;1&#xff09;HTTP请求的基本格式 &#xff08;2&#xff09;HTTP响应的基本格式 四 . HTTP 方法 GET 和 POST 的区别&#xff1a; 五 . 请求报头和响应报头 &#xff08;1&#…

基于单片机的自动条幅悬挂机

摘 要 随着日新月异科技发展&#xff0c;在心率体温测量方面&#xff0c;我们取得了迅速的发展&#xff0c;就近日而言&#xff0c;脉搏测量仪已经在多个领域大展身手&#xff0c;除了在医学领域有所建树&#xff0c;在人们的日常生活方面的应用也不断拓展&#xff0c;如检疫…

《C++》面向对象编程--类(中)

文章目录一、构造函数1.1定义1.2语法1.3特性二、析构函数2.1定义2.2语法2.3特性三、拷贝构造函数3.1定义3.2语法3.3特性3.4浅拷贝3.4.1定义3.4.2浅拷贝的风险3.5深拷贝一、构造函数 1.1定义 在C中&#xff0c;构造函数&#xff08;Constructor&#xff09; 是一种特殊的成员函…

机器学习初学者理论初解

大家好! 为什么手机相册能自动识别人脸&#xff1f;为什么购物网站总能推荐你喜欢的商品&#xff1f;这些“智能”背后&#xff0c;都藏着一位隐形高手——机器学习&#xff08;Machine Learning&#xff09;。一、什么是机器学习&#xff1f;简单说&#xff0c;机器学习是教计…

原码反码补码

在Java中&#xff0c;无论是小数还是整数&#xff0c;他们都要带有符号&#xff08;和C语言不同&#xff0c;C语言有无符号数&#xff09;。首位就作为符号位。原码反码&#xff1a;正数的反码是其原码本身负数的反码是在其原码的基础上, 符号位不变&#xff0c;其余各个位取反…

使用ubuntu:20.04和ubuntu:jammy构建secretflow环境

一、使用ubuntu:20.04构建隐语编译环境FROM ubuntu:20.04LABEL maintainer"build SecureProtocolLib on ubuntu:20.04"ARG TARGETPLATFORM# change dash to bash as default shell RUN ln -sf /bin/bash /bin/shRUN apt update \&& apt upgrade -y \&&am…

Hinge Loss(铰链损失函数)详解:SVM 中的关键损失函数

&#x1f4cc; 一、什么是 Hinge Loss&#xff1f;Hinge Loss&#xff08;铰链损失&#xff09;&#xff0c;是 支持向量机&#xff08;SVM, Support Vector Machine&#xff09; 中常用的一种损失函数&#xff0c;用于最大间隔分类。其核心思想是&#xff1a;当预测结果已经正…