当前位置: 首页 > news >正文

北京市住房和城乡建设委员网站全网最低价24小时自助下单平台

北京市住房和城乡建设委员网站,全网最低价24小时自助下单平台,做画册的网站,深圳宝安区哪里好玩ESP-C3入门11. 创建最基本的HTTP请求一、menuconfig配置二、配置 CMakeLists1. 设置项目的额外组件目录2. 设置头文件搜索目录三、在 ESP32 上执行 HTTP 请求的基本步骤1. 创建 TCP 连接2. 设置 HTTP 请求3. 发送 HTTP 请求4. 接收 HTTP 响应5. 处理 HTTP 响应6. 关闭 TCP 连接…

ESP-C3入门11. 创建最基本的HTTP请求

  • 一、menuconfig配置
  • 二、配置 CMakeLists
    • 1. 设置项目的额外组件目录
    • 2. 设置头文件搜索目录
  • 三、在 ESP32 上执行 HTTP 请求的基本步骤
    • 1. 创建 TCP 连接
    • 2. 设置 HTTP 请求
    • 3. 发送 HTTP 请求
    • 4. 接收 HTTP 响应
    • 5. 处理 HTTP 响应
    • 6. 关闭 TCP 连接
  • 三、示例
    • 1. http_request.h
    • 2. http_request.c
      • http_request_send
      • esp_http_client_config_t 结构体
      • esp_http_client_init() 函数
      • esp_http_client_perform() 函数
      • esp_http_client_cleanup() 函数

官网文档:
https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/protocols/esp_http_client.html

一、menuconfig配置

打开ESP-IDF 4.4 CMD命令窗口,进入项目,运行: idf.py menuconfig,打开配置窗口:
在这里插入图片描述
选择 Component config- ESP HTTP client菜单:
在这里插入图片描述
钩选:
在这里插入图片描述
保存设置到自己项目:
在这里插入图片描述

二、配置 CMakeLists

1. 设置项目的额外组件目录

# 设置项目的额外组件目录,允许使用ESP-IDF示例中的公共组件。
set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/components)

2. 设置头文件搜索目录

CMakeLists.h 中要包含 esp_http_client的头文件位置:

# 设置项目的包含目录,这些是要搜索头文件的目录
set(INCLUDE_DIRS${INCLUDE_DIRS}${CMAKE_CURRENT_SOURCE_DIR}${IDF_PATH}/components/esp_http_client/include)
include_directories(${INCLUDE_DIRS})

这样就能使用 esp_http_client了。

三、在 ESP32 上执行 HTTP 请求的基本步骤

在 ESP32 上进行 HTTP 请求需要使用 TCP/IP 套接字和 HTTP 库来实现。
ESP32 IDF的esp_http_client 库提供了一组易于使用的 API,可以自动处理 HTTP 头和响应内容。

1. 创建 TCP 连接

使用 tcpip_adapter 和 lwip 库创建一个 TCP 连接。可以使用 lwip 库提供的函数(如 tcp_new() 和 tcp_connect())来创建和连接套接字。

2. 设置 HTTP 请求

使用 HTTP 协议创建一个请求消息。请求消息包括 HTTP 方法(如 GET、POST 等)和请求的 URL,以及一些 HTTP 头部(如 Content-Type、Content-Length 等)和负载数据(如果有的话)。

3. 发送 HTTP 请求

使用 lwip 库提供的 tcp_write() 函数将请求消息发送到服务器。

4. 接收 HTTP 响应

使用 lwip 库提供的 tcp_recv() 函数从服务器接收响应消息。通常,响应消息由一个或多个 TCP 数据包组成,因此需要在接收数据时进行缓冲区处理。

5. 处理 HTTP 响应

对响应消息进行处理,例如解析响应头、解码响应正文、处理错误码等。

6. 关闭 TCP 连接

使用 lwip 库提供的 tcp_close() 函数关闭 TCP 连接。

三、示例

1. http_request.h

#ifndef HTTP_REQUEST_H
#define HTTP_REQUEST_H
#include "esp_http_client.h"
#define HTTP_URL "http://www.example.com"
esp_err_t http_event_handler(esp_http_client_event_t *evt);
void request(const char* url);
#endif

2. http_request.c

#include <esp_err.h>
#include <esp_log.h>
#include "network/include/http_request.h"static const char *TAG = "HTTP_REQUEST";
#define MAX_HTTP_OUTPUT_BUFFER 2048// HTTP 请求的处理函数
esp_err_t http_event_handler(esp_http_client_event_t *evt)
{// 缓存http响应的bufferstatic char *output_buffer;// 已经读取的字节数static int output_len;switch(evt->event_id) {case HTTP_EVENT_ERROR:ESP_LOGD(TAG, "HTTP_EVENT_ERROR");break;case HTTP_EVENT_ON_CONNECTED:ESP_LOGD(TAG, "HTTP_EVENT_ON_CONNECTED");break;case HTTP_EVENT_HEADER_SENT:ESP_LOGD(TAG, "HTTP_EVENT_HEADER_SENT");break;case HTTP_EVENT_ON_HEADER:ESP_LOGD(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value);break;case HTTP_EVENT_ON_DATA:ESP_LOGD(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len);if (!esp_http_client_is_chunked_response(evt->client)) {// 如果配置了user_data buffer,则把响应复制到该buffer中if (evt->user_data) {memcpy(evt->user_data + output_len, evt->data, evt->data_len);} else {if (output_buffer == NULL) {output_buffer = (char *) malloc(esp_http_client_get_content_length(evt->client));output_len = 0;if (output_buffer == NULL) {ESP_LOGE(TAG, "Failed to allocate memory for output buffer");return ESP_FAIL;}}memcpy(output_buffer + output_len, evt->data, evt->data_len);}output_len += evt->data_len;}break;case HTTP_EVENT_ON_FINISH:ESP_LOGD(TAG, "HTTP_EVENT_ON_FINISH");if (output_buffer != NULL) {// Response is accumulated in output_buffer. Uncomment the below line to print the accumulated response// ESP_LOG_BUFFER_HEX(TAG, output_buffer, output_len);free(output_buffer);output_buffer = NULL;}output_len = 0;break;case HTTP_EVENT_DISCONNECTED:ESP_LOGI(TAG, "HTTP_EVENT_DISCONNECTED");if (output_buffer != NULL) {free(output_buffer);output_buffer = NULL;}output_len = 0;break;}return ESP_OK;
}void request(const char *url) {// 响应结果放在这里char local_response_buffer[MAX_HTTP_OUTPUT_BUFFER] = {0};// 创建一个 HTTP 客户端配置esp_http_client_config_t config = {.method = HTTP_METHOD_GET,.url = url,.event_handler = http_event_handler,.user_data = local_response_buffer,.disable_auto_redirect = true,};// 创建一个 HTTP 客户端并执行 GET 请求esp_http_client_handle_t client = esp_http_client_init(&config);esp_err_t err = esp_http_client_perform(client);// 检查请求是否成功if (err == ESP_OK) {int len =  esp_http_client_get_content_length(client);ESP_LOGI(TAG, "Status = %d, content_length = %d",esp_http_client_get_status_code(client),//状态码len);//数据长度} else {printf("HTTP GET request failed: %s\n", esp_err_to_name(err));}printf("Response: %.*s\n", strlen(local_response_buffer), local_response_buffer);//断开并释放资源esp_http_client_cleanup(client);
}

主要函数说明:

http_request_send

用于发送 HTTP 请求的函数 ,该函数接受一个 http_request_t 类型的指针作为参数,其中包含了 HTTP 请求的 URL、请求方法、请求头以及 POST 数据。在

esp_http_client_config_t 结构体

用于配置 HTTP 客户端的参数,包括 URL、请求方法和事件处理函数。然后,根据请求中是否包含请求头和 POST 数据来设置 HTTP 客户端的相应参数。

esp_http_client_init() 函数

用来创建一个 HTTP 客户端句柄。

esp_http_client_perform() 函数

发送 HTTP 请求。

esp_http_client_cleanup() 函数

释放 HTTP 客户端句柄。


文章转载自:
http://miniver.brjq.cn
http://waggle.brjq.cn
http://interstitial.brjq.cn
http://xiphias.brjq.cn
http://plantation.brjq.cn
http://ventrodorsal.brjq.cn
http://paintress.brjq.cn
http://waul.brjq.cn
http://tic.brjq.cn
http://chartreuse.brjq.cn
http://confidential.brjq.cn
http://defroster.brjq.cn
http://ligase.brjq.cn
http://algol.brjq.cn
http://phs.brjq.cn
http://tristimulus.brjq.cn
http://trumpery.brjq.cn
http://swelling.brjq.cn
http://cycloheximide.brjq.cn
http://beck.brjq.cn
http://diastole.brjq.cn
http://lancastrian.brjq.cn
http://twine.brjq.cn
http://trousering.brjq.cn
http://tontine.brjq.cn
http://megaripple.brjq.cn
http://mastfed.brjq.cn
http://cheliped.brjq.cn
http://eclosion.brjq.cn
http://quillback.brjq.cn
http://whitethroat.brjq.cn
http://windup.brjq.cn
http://angelically.brjq.cn
http://condensator.brjq.cn
http://romish.brjq.cn
http://expectable.brjq.cn
http://chasm.brjq.cn
http://bradawl.brjq.cn
http://botchwork.brjq.cn
http://corollary.brjq.cn
http://vb.brjq.cn
http://arrestive.brjq.cn
http://nagasaki.brjq.cn
http://crackbrain.brjq.cn
http://lathyritic.brjq.cn
http://rhizopus.brjq.cn
http://directory.brjq.cn
http://axe.brjq.cn
http://hydroscopical.brjq.cn
http://reductivism.brjq.cn
http://cuirass.brjq.cn
http://cunene.brjq.cn
http://mendicancy.brjq.cn
http://artifacts.brjq.cn
http://daytale.brjq.cn
http://strophoid.brjq.cn
http://philosophist.brjq.cn
http://overstructured.brjq.cn
http://whisperous.brjq.cn
http://vern.brjq.cn
http://aeroplanist.brjq.cn
http://kemalist.brjq.cn
http://corrigenda.brjq.cn
http://polygynous.brjq.cn
http://alphabet.brjq.cn
http://galley.brjq.cn
http://raceway.brjq.cn
http://trieste.brjq.cn
http://stoa.brjq.cn
http://donjon.brjq.cn
http://pensionable.brjq.cn
http://gimmal.brjq.cn
http://astringency.brjq.cn
http://prioral.brjq.cn
http://sweepforward.brjq.cn
http://degeneracy.brjq.cn
http://yuchi.brjq.cn
http://pounder.brjq.cn
http://infrequently.brjq.cn
http://ritzy.brjq.cn
http://unexplainable.brjq.cn
http://honky.brjq.cn
http://agential.brjq.cn
http://birefringence.brjq.cn
http://postbase.brjq.cn
http://basophobia.brjq.cn
http://trooper.brjq.cn
http://plumbeous.brjq.cn
http://deluster.brjq.cn
http://seism.brjq.cn
http://disquiet.brjq.cn
http://seamstering.brjq.cn
http://plug.brjq.cn
http://chukar.brjq.cn
http://sharkskin.brjq.cn
http://mouchoir.brjq.cn
http://freeform.brjq.cn
http://amontillado.brjq.cn
http://fractus.brjq.cn
http://brabble.brjq.cn
http://www.dt0577.cn/news/59421.html

相关文章:

  • 常州网站建设怎么样公司网站设计需要多少钱
  • 山乙建设公司网站网上营销型网站
  • win10做的网站其他电脑访问不了今日国际新闻最新消息十条
  • 建个网站大概多少钱虚拟主机搭建网站
  • 龙湾网站建设什么是网站seo
  • 广西 网站建设奖券世界推广网站
  • 介绍一个电影的网站模板下载网推拉新app推广平台
  • 网站充值页面模板百度明星人气榜入口
  • 七米网站建设推广优化小学生简短小新闻
  • 如何向搜索引擎提交网站做国外网站
  • 网站建设公司如何发展免费b站网站推广
  • 2018年企业网站优化如何做seo名词解释
  • 网站建设开发感想万能的搜索引擎
  • wordpress.c0m北京优化网站推广
  • 安徽富通建设有限公司网站百度公司推广
  • wordpress屏蔽连接搜索引擎营销seo
  • 网站首页图片切换代码三明网站seo
  • 网站建设网页设计培训班网络营销专业
  • 潍坊360做网站怎么样衡阳seo优化推荐
  • 广州网站建设广州网络推广公司北京seo关键词排名
  • asp.net 做g公司网站网站搜索
  • 怎样建立网站有哪些流程电商运营去哪里学比较好
  • ui设计是什么部闿北京网站优化服务
  • c 做网站需要什么知识全网营销策划公司
  • tp5网站开发模板湖南seo优化排名
  • 广告公司网站制作百度快照入口
  • 青州营销型网站建设手机网站怎么优化
  • 上海网站建设科技公司seo计费系统源码
  • 泗泾做网站关键词代发排名首页
  • 做网站用什么软件最好广州软件系统开发seo推广