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

【史上最全面ESP32教程】http通信

文章目录

  • 前言
  • HTTP协议是什么?
    • HTTP协议的特点
    • HTTP协议的常见应用
  • esp32 使用http通信
    • 通信流程
    • 基础使用
    • HTTPClient 常用的函数
      • 函数介绍:
        • `void end(void);`
        • `bool connected(void);`
        • `void setReuse(bool reuse);`
        • `void setUserAgent(const String& userAgent);`
        • `void setAuthorization(const char * user, const char * password);`
        • `int GET();`
        • `String getString(void);`
        • `int PATCH(uint8_t * payload, size_t size);`
        • `int PATCH(String payload);`
        • `int POST(uint8_t * payload, size_t size);`
        • `int POST(String payload);`
        • `int PUT(uint8_t * payload, size_t size);`
        • `int PUT(String payload);`
        • `int sendRequest(const char * type, String payload);`
        • `void addHeader(const String& name, const String& value, bool first = false, bool replace = true);`
        • `void collectHeaders(const char* headerKeys[], const size_t headerKeysCount);`
        • `String header(const char* name);`
        • `String header(size_t i);`
        • `String headerName(size_t i);`
        • `int headers();`
        • `bool hasHeader(const char* name);`
        • `int getSize(void);`
        • `const String &getLocation(void);`
        • `WiFiClient& getStream(void);`
        • `WiFiClient* getStreamPtr(void);`
        • `int writeToStream(Stream* stream);`
        • `String getString(void);`
        • `static String errorToString(int error);`
        • `void setCookieJar(CookieJar* cookieJar);`
        • `void resetCookieJar();`
        • `void clearAllCookies();`
  • 总结


前言

随着物联网(IoT)的快速发展,ESP32作为一款高性能、低功耗的Wi-Fi和蓝牙双模芯片,受到了广泛的关注和应用。在物联网设备中,HTTP协议是实现设备与服务器之间通信的常用协议。本文将介绍HTTP协议的基本概念及其常见应用场景。


HTTP协议是什么?

HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于传输超文本的应用层协议。它是万维网(WWW)的基础,定义了客户端(如浏览器)与服务器之间的通信规则。HTTP协议采用请求-响应模式,客户端发送请求,服务器返回响应。

HTTP协议的特点

  • 无状态:每次请求都是独立的,服务器不会保留之前请求的状态。
  • 灵活性:支持多种数据格式,如HTML、JSON、XML等。
  • 简单性:易于实现和使用,广泛应用于Web开发。

HTTP协议的常见应用

  • Web浏览:浏览器通过HTTP协议请求网页内容,服务器返回HTML页面。
  • API通信:物联网设备通过HTTP协议与服务器进行数据交互,如上传传感器数据或获取控制指令。
  • 文件传输:通过HTTP协议下载或上传文件,如软件更新或日志文件。

esp32 使用http通信

通信流程

  1. 连接网络
  2. 开始http通信
  3. 发送请求并获取响应
  4. 关闭连接

基础使用

我们需要使用HTTPClient类来进行通信
如果我们要开启一个http通信使用下面这个函数,参数为你要http通信的url:

bool begin(String url);

如果我们要GET一个内容,我们可以使用下面这个函数:

int GET();

他的返回值为状态码。
状态码有下面这些取值:

  • 200 OK:请求成功。具体的含义取决于HTTP方法。例如,GET方法表示资源已被获取并在消息体中传输。
  • 201 Created:请求成功,并且新的资源已经作为结果创建。这通常是在POST请求或某些PUT请求后发送的响应。
  • 204 No Content:没有要发送的内容,但头部可能有用。用户代理可能会使用新的头部更新此资源的缓存头部。
  • 301 Moved Permanently:请求的URL已永久移动到新位置,并且将来的引用应使用新的URL。
  • 400 Bad Request:服务器无法理解请求的语法。
  • 401 Unauthorized:请求需要用户验证。
  • 403 Forbidden:服务器理解请求,但拒绝执行它。
  • 404 Not Found:服务器找不到请求的资源。
  • 500 Internal Server Error:服务器遇到错误,无法完成请求

我们可以通过下面这个函数来获取GET的返回值:

String getString(void);

我们可以使用下面这个函数来关闭http连接:

void end(void);
#include <WiFi.h>
#include <HTTPClient.h>const char* ssid = ".......";        // WiFi网络名称
const char* password = ".......";  // WiFi网络密码void setup() {Serial.begin(115200);  // 初始化串口通信// 连接到WiFi网络WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(1000);Serial.println("Connecting to WiFi...");}Serial.println("Connected to WiFi");// 设置HTTPClient对象HTTPClient http;// 为GET请求设置目标URLString url = "http://example.com/api/data"; // 替换为你的目标URL// 发送GET请求http.begin(url);// 发送请求并获取响应int httpResponseCode = http.GET();if (httpResponseCode > 0) { // 如果收到响应Serial.print("HTTP Response code: ");Serial.println(httpResponseCode); // 打印响应代码String payload = http.getString(); // 获取响应内容Serial.println(payload); // 打印响应内容} else {Serial.print("Error code: ");Serial.println(httpResponseCode); // 打印错误代码}http.end(); // 关闭连接
}void loop() {// 程序主循环,此处不需要添加其他代码
}

HTTPClient 常用的函数

函数介绍:

void end(void);
  • 函数原型: void end(void);
  • 函数作用: 关闭HTTPClient对象,释放资源。
  • 函数参数: 无。
  • 返回值的作用: 无返回值。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    // 处理响应
    http.end(); // 关闭HTTP连接
    
bool connected(void);
  • 函数原型: bool connected(void);
  • 函数作用: 检查HTTPClient对象是否已连接到服务器。
  • 函数参数: 无。
  • 返回值的作用: 返回true表示连接成功,返回false表示未连接或连接已断开。
  • 示例代码:
    HTTPClient http;
    if (http.connected()) {// 执行请求操作
    } else {// 重新连接或处理断开连接情况
    }
    
void setReuse(bool reuse);
  • 函数原型: void setReuse(bool reuse);
  • 函数作用: 设置是否启用HTTP keep-alive功能,允许多次复用同一TCP连接。
  • 函数参数:
    • reuse:布尔值,true表示启用keep-alive,false表示禁用。
  • 返回值的作用: 无返回值。
  • 示例代码:
    HTTPClient http;
    http.setReuse(true); // 启用keep-alive
    
void setUserAgent(const String& userAgent);
  • 函数原型: void setUserAgent(const String& userAgent);
  • 函数作用: 设置HTTP请求的用户代理(User-Agent)标头。
  • 函数参数:
    • userAgent:String类型,要设置的用户代理字符串。
  • 返回值的作用: 无返回值。
  • 示例代码:
    HTTPClient http;
    http.setUserAgent("ESP32 Client");
    
void setAuthorization(const char * user, const char * password);
  • 函数原型: void setAuthorization(const char * user, const char * password);
  • 函数作用: 设置基本身份验证的用户名和密码。
  • 函数参数:
    • user:用户名字符串。
    • password:密码字符串。
  • 返回值的作用: 无返回值。
  • 示例代码:
    HTTPClient http;
    http.setAuthorization("username", "password");
    
int GET();
  • 函数原型: int GET();
  • 函数作用: 发送HTTP GET请求并接收响应。
  • 函数参数: 无。
  • 返回值的作用: 返回HTTP响应状态代码(例如200表示成功)。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    // 处理响应
    
String getString(void);
  • 函数原型: String getString(void);
  • 函数作用: 获取HTTP响应的正文内容。
  • 函数参数: 无。
  • 返回值的作用: 返回包含HTTP响应正文内容的String对象。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    if (httpResponseCode > 0) {String response = http.getString();Serial.println(response);
    }
    
int PATCH(uint8_t * payload, size_t size);
  • 函数原型: int PATCH(uint8_t * payload, size_t size);
  • 函数作用: 发送HTTP PATCH请求并附带数据。
  • 函数参数:
    • payload:指向要发送数据的字节数组的指针。
    • size:要发送数据的大小(字节数)。
  • 返回值的作用: 返回HTTP响应状态代码。
  • 示例代码:
    HTTPClient http;
    uint8_t data[] = { 0x01, 0x02, 0x03 };
    int httpResponseCode = http.PATCH(data, sizeof(data));
    
int PATCH(String payload);
  • 函数原型: int PATCH(String payload);
  • 函数作用: 发送HTTP PATCH请求并附带数据(字符串形式)。
  • 函数参数:
    • payload:要发送的数据字符串。
  • 返回值的作用: 返回HTTP响应状态代码。
  • 示例代码:
    HTTPClient http;
    String data = "key=value";
    int httpResponseCode = http.PATCH(data);
    
int POST(uint8_t * payload, size_t size);
  • 函数原型: int POST(uint8_t * payload, size_t size);
  • 函数作用: 发送HTTP POST请求并附带数据。
  • 函数参数:
    • payload:指向要发送数据的字节数组的指针。
    • size:要发送数据的大小(字节数)。
  • 返回值的作用: 返回HTTP响应状态代码。
  • 示例代码:
    HTTPClient http;
    uint8_t data[] = { 0x01, 0x02, 0x03 };
    int httpResponseCode = http.POST(data, sizeof(data));
    
int POST(String payload);
  • 函数原型: int POST(String payload);
  • 函数作用: 发送HTTP POST请求并附带数据(字符串形式)。
  • 函数参数:
    • payload:要发送的数据字符串。
  • 返回值的作用: 返回HTTP响应状态代码。
  • 示例代码:
    HTTPClient http;
    String data = "key=value";
    int httpResponseCode = http.POST(data);
    
int PUT(uint8_t * payload, size_t size);
  • 函数原型: int PUT(uint8_t * payload, size_t size);
  • 函数作用: 发送HTTP PUT请求并附带数据。
  • 函数参数:
    • payload:指向要发送数据的字节数组的指针。
    • size:要发送数据的大小(字节数)。
  • 返回值的作用: 返回HTTP响应状态代码。
  • 示例代码:
    HTTPClient http;
    uint8_t data[] = { 0x01, 0x02, 0x03 };
    int httpResponseCode = http.PUT(data, sizeof(data));
    
int PUT(String payload);
  • 函数原型: int PUT(String payload);
  • 函数作用: 发送HTTP PUT请求并附带数据(字符串形式)。
  • 函数参数:
    • payload:要发送的数据字符串。
  • 返回值的作用: 返回HTTP响应状态代码。
  • 示例代码:
    HTTPClient http;
    String data = "key=value";
    int httpResponseCode = http.PUT(data);
    
int sendRequest(const char * type, String payload);
  • 函数原型: int sendRequest(const char * type, String payload);
  • 函数作用: 发送自定义类型的HTTP请求,并附带数据(字符串形式)。
  • 函数参数:
    • type:HTTP请求类型,例如 “GET”, “POST”, “PUT” 等。
    • payload:要发送的数据字符串。
  • 返回值的作用: 返回HTTP响应状态代码。
  • 示例代码:
    HTTPClient http;
    int httpResponseCode = http.sendRequest("POST", "key=value");
    
void addHeader(const String& name, const String& value, bool first = false, bool replace = true);
  • 函数原型: void addHeader(const String& name, const String& value, bool first = false, bool replace = true);
  • 函数作用: 添加HTTP请求头。
  • 函数参数:
    • name:头部字段的名称。
    • value:头部字段的值。
    • first:可选参数,默认为false。如果为true,则将新头部添加到头部列表的开头。
    • replace:可选参数,默认为true。如果为true,则替换现有的同名头部;如果为false,则添加到现有同名头部后面。
  • 返回值的作用: 无返回值。
  • 示例代码:
    HTTPClient http;
    http.addHeader("Content-Type", "application/json");
    
void collectHeaders(const char* headerKeys[], const size_t headerKeysCount);
  • 函数原型: void collectHeaders(const char* headerKeys[], const size_t headerKeysCount);
  • 函数作用: 指定要收集的HTTP响应头。
  • 函数参数:
    • headerKeys:指向包含要收集的头部字段名称的数组。
    • headerKeysCount:数组中头部字段名称的数量。
  • 返回值的作用: 无返回值。
  • 示例代码:
    const char* headersToCollect[] = { "Content-Length", "Content-Type" };
    HTTPClient http;
    http.collectHeaders(headersToCollect, sizeof(headersToCollect) / sizeof(headersToCollect[0]));
    
String header(const char* name);
  • 函数原型: String header(const char* name);
  • 函数作用: 获取指定名称的HTTP响应头值。
  • 函数参数:
    • name:要获取的头部字段名称。
  • 返回值的作用: 返回包含头部字段值的String对象。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    String contentType = http.header("Content-Type");
    
String header(size_t i);
  • 函数原型: String header(size_t i);
  • 函数作用: 获取指定索引位置的HTTP响应头值。
  • 函数参数:
    • i:要获取的头部字段的索引(从0开始)。
  • 返回值的作用: 返回包含头部字段值的String对象。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    String firstHeader = http.header(0);
    
String headerName(size_t i);
  • 函数原型: String headerName(size_t i);
  • 函数作用: 获取指定索引位置的HTTP响应头名称。
  • 函数参数:
    • i:要获取的头部字段的索引(从0开始)。
  • 返回值的作用: 返回包含头部字段名称的String对象。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    String firstName = http.headerName(0);
    
int headers();
  • 函数原型: int headers();
  • 函数作用: 获取HTTP响应中头部字段的数量。
  • 函数参数: 无。
  • 返回值的作用: 返回头部字段的数量。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    int numHeaders = http.headers();
    
bool hasHeader(const char* name);
  • 函数原型: bool hasHeader(const char* name);
  • 函数作用: 检查HTTP响应中是否存在指定名称的头部字段。
  • 函数参数:
    • name:要检查

的头部字段名称。

  • 返回值的作用: 如果存在指定名称的头部字段,则返回true;否则返回false
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    if (http.hasHeader("Content-Type")) {// 处理存在Content-Type头部的情况
    }
    
int getSize(void);
  • 函数原型: int getSize(void);
  • 函数作用: 获取HTTP响应正文的大小(字节数)。
  • 函数参数: 无。
  • 返回值的作用: 返回HTTP响应正文的大小。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    int contentSize = http.getSize();
    
const String &getLocation(void);
  • 函数原型: const String &getLocation(void);
  • 函数作用: 获取HTTP响应中的 Location 头部字段的值,用于处理重定向。
  • 函数参数: 无。
  • 返回值的作用: 返回包含 Location 头部字段值的String对象的引用。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    String redirectLocation = http.getLocation();
    
WiFiClient& getStream(void);
  • 函数原型: WiFiClient& getStream(void);
  • 函数作用: 获取底层的WiFiClient对象,用于直接访问底层网络连接。
  • 函数参数: 无。
  • 返回值的作用: 返回一个WiFiClient对象的引用。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    WiFiClient& stream = http.getStream();
    
WiFiClient* getStreamPtr(void);
  • 函数原型: WiFiClient* getStreamPtr(void);
  • 函数作用: 获取底层的WiFiClient对象指针,用于直接访问底层网络连接。
  • 函数参数: 无。
  • 返回值的作用: 返回一个指向WiFiClient对象的指针。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    WiFiClient* streamPtr = http.getStreamPtr();
    
int writeToStream(Stream* stream);
  • 函数原型: int writeToStream(Stream* stream);
  • 函数作用: 将HTTP响应内容写入给定的流(Stream)对象。
  • 函数参数:
    • stream:指向目标流对象的指针。
  • 返回值的作用: 返回写入流的字节数。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    WiFiClient client;
    int bytesWritten = http.writeToStream(&client);
    
String getString(void);
  • 函数原型: String getString(void);
  • 函数作用: 获取HTTP响应的正文内容。
  • 函数参数: 无。
  • 返回值的作用: 返回包含HTTP响应正文内容的String对象。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    String response = http.getString();
    
static String errorToString(int error);
  • 函数原型: static String errorToString(int error);
  • 函数作用: 将HTTPClient库中的错误代码转换为对应的错误消息字符串。
  • 函数参数:
    • error:HTTPClient库中定义的错误代码。
  • 返回值的作用: 返回表示错误消息的String对象。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    if (httpResponseCode < 0) {String errorMessage = HTTPClient::errorToString(httpResponseCode);Serial.println(errorMessage);
    }
    
void setCookieJar(CookieJar* cookieJar);
  • 函数原型: void setCookieJar(CookieJar* cookieJar);
  • 函数作用: 设置用于管理HTTP请求和响应中Cookie的CookieJar对象。
  • 函数参数:
    • cookieJar:指向CookieJar对象的指针。
  • 返回值的作用: 无返回值。
  • 示例代码:
    CookieJar cookieJar;
    HTTPClient http;
    http.setCookieJar(&cookieJar);
    
void resetCookieJar();
  • 函数原型: void resetCookieJar();
  • 函数作用: 重置CookieJar,清除所有保存的Cookie。
  • 函数参数: 无。
  • 返回值的作用: 无返回值。
  • 示例代码:
    HTTPClient http;
    http.resetCookieJar();
    
void clearAllCookies();
  • 函数原型: void clearAllCookies();
  • 函数作用: 清除所有保存的Cookie,无论它们是否过期。
  • 函数参数: 无。
  • 返回值的作用: 无返回值。
  • 示例代码:
    HTTPClient http;
    http.clearAllCookies();
    

总结

本文简要介绍了HTTP协议的基本概念及其在物联网设备中的常见应用。HTTP协议作为一种简单、灵活的通信协议,广泛应用于Web开发和物联网设备中。希望本文能帮助读者更好地理解HTTP协议及其在ESP32中的应用。

相关文章:

【史上最全面ESP32教程】http通信

文章目录 前言HTTP协议是什么&#xff1f;HTTP协议的特点HTTP协议的常见应用 esp32 使用http通信通信流程基础使用HTTPClient 常用的函数函数介绍&#xff1a;void end(void);bool connected(void);void setReuse(bool reuse);void setUserAgent(const String& userAgent);…...

*算法训练(leetcode)第二十七天 | 56. 合并区间、738. 单调递增的数字、968. 监控二叉树

刷题记录 56. 合并区间*738. 单调递增的数字*968. 监控二叉树 56. 合并区间 leetcode题目地址 排序后遇到有重合的区间选择最大的区间保存即可&#xff0c;结果集中保存的是离当前区间最近的区间&#xff0c;因此使用当前区间与结果集中的最后一个集合比较查看是否有重合&…...

OpenJudge 奇数求和

目录 描述思路样例输入样例输出CodeCC 总时间限制: 1000ms 内存限制: 65536kB 描述 计算非负整数 m 到 n&#xff08;包括m 和 n &#xff09;之间的所有奇数的和&#xff0c;其中&#xff0c;m 不大于 n&#xff0c;且n 不大于300。例如 m3, n12, 其和则为&#xff1a;357911…...

【排序 - 快速排序】

快速排序&#xff08;Quick Sort&#xff09;是一种高效的排序算法&#xff0c;它基于分治&#xff08;Divide and Conquer&#xff09;的策略。这种排序算法的核心思想是选择一个基准元素&#xff0c;将数组分割成两部分&#xff0c;使得左边的元素都小于等于基准元素&#xf…...

pytest使用报错(以及解决pytest所谓的“抑制print输出”)

1. 测试类的类名问题 #codingutf-8import pytestclass TestClass1:def setup(self) -> None:print(setup)def test_01(self) -> None:print(test_01111111111111111111111)def test_02(self) -> None:print(test_02)以上述代码为例&#xff0c;如果类名是Test开头&am…...

开源项目编译harbor arm架构的包 —— 筑梦之路

GitHub - amy5200/harbor-arm64 先做个记录&#xff0c;空了再验证...

[笔记] SKF Enveloping FAQ 用户指南

文档编号&#xff1a;Application Note CM3013 1.名词解释&#xff1a; 1.1cavitationWhat Is Cavitation? | Pumps & Systems 叶片在液体中扰动形成的超声波 1.2 stiff machinehttps://suspensionlist.com/the-pros-and-cons-of-stiff-vs-soft-suspension-systems/ …...

宪法学学习笔记(个人向) Part.3

宪法学学习笔记(个人向) Part 3 3. 国家基本制度 3.1 国家性质 3.1.1 国家性质概述 国家性质的概念 国家性质也称国体&#xff0c;或国家的阶级本质&#xff0c;是指各个阶级在国家中的地位&#xff08;哪个阶层是统治阶层&#xff0c;哪个阶层是被统治阶层&#xff0c;哪个…...

联想拯救者Y7000 IRX9 笔记本接口功能介绍

适用机型&#xff1a;Legion Y7000 IRX9; 83JJ&#xff1b; USB&#xff08;3.2 Gen 1&#xff09;Type-接口摄像头开关组合音频插孔 多用于USB Type-C接口 以太网接口 多用途USB Type-C接口&#xff08;支持USB Power Delivery&#xff09;HDMI接口USB&#xff08;3.2 Gen 1&…...

【ESP32】打造全网最强esp-idf基础教程——16.SmartConfig一键配网

SmartConfig一键配网 一、SmartConfig知识扫盲 在讲STA课程的时候&#xff0c;我们用的是代码里面固定的SSID和密码去连接热点&#xff0c;但实际应用中不可能这么弄&#xff0c;我们得有办法把家里的WiFi SSID和密码输入到设备里面去&#xff0c;对于带屏带输入设备还…...

MD5加密和注册页面的编写

MD5加密 1.导入包 npm install --save ts-md5 2.使用方式 import { Md5 } from ts-md5; //md5加密后的密码 const md5PwdMd5.hashStr("123456").toUpperCase(); 遇见的问题及用到的技术 注册页面 register.vue代码 <template><div class"wappe…...

【Android组件】封装加载弹框

&#x1f4d6;封装加载弹框 ✅1. 构造LoadingDialog✅2. 调用LoadingDialog 效果&#xff1a; ✅1. 构造LoadingDialog 构造LoadingDialog类涉及到设计模式中的建造者模式&#xff0c;进行链式调用&#xff0c;注重的是构建的过程&#xff0c;设置需要的属性。 步骤一&#x…...

Spring源码二十:Bean实例化流程三

上一篇Spring源码十九&#xff1a;Bean实例化流程二中&#xff0c;我们主要讨论了单例Bean创建对象的主要方法getSingleton了解到了他的核心流程无非是&#xff1a;通过一个简单工厂的getObject方法来实例化bean&#xff0c;当然spring在实例化前后提供了扩展如&#xff1a;bef…...

前端导出文件时,后端代码出错如何将错误信息返回给前端展示

功能说明&#xff1a;前端导出excel时&#xff0c;后端出现异常&#xff0c;比如sql异常&#xff0c;或者创建excel时出现的异常&#xff0c;希望将这些异常信息返回给前端查看。 框架&#xff1a;vue3 axios Springboot 实现难度分析&#xff1a;前端导出excel&#xff0c…...

解决Spring Boot应用中的内存优化问题

解决Spring Boot应用中的内存优化问题 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. Spring Boot应用的内存管理 在开发和部署Spring Boot应用时&#xff0c;有效地管理内存是确保应用性能和稳…...

shark云原生-日志体系-filebeat高级配置(适用于生产)-更新中

文章目录 1. filebeat.inputs 静态日志收集器2. filebeat.autodiscover 自动发现2.1. autodiscover 和 inputs2.2. 如何配置生效2.3. Providers 提供者2.4. Providers kubernetes2.5. 配置 templates2.5.1. kubernetes 自动发现事件中的变量字段2.5.2 配置 templates 2.6. 基于…...

响应式设计的双璧:WebKit 支持 CSS Flexbox 和 Grid 布局深度解析

响应式设计的双璧&#xff1a;WebKit 支持 CSS Flexbox 和 Grid 布局深度解析 在现代网页设计中&#xff0c;响应式布局是实现跨设备兼容性的关键。CSS Flexbox 和 Grid 作为 CSS 布局的两大支柱&#xff0c;提供了强大的工具来构建灵活和复杂的用户界面。WebKit&#xff0c;作…...

Linux软件包管理

一、软件包管理 1.什么是软件包 一般在window系统的.exe是软件按转包 2.linux系统下的软件包安装方式 PRM 软件包安装 软件名称.rpmYUM 包管理工具 yum intall 软件名称 -y源码安装 下载源代码---编译---安装 很麻烦&#xff0c;稳定 3.二进制软件包 二进制 4.获取*.rpm…...

如何分辨AI生成的内容?AI生成内容检测工具对比实验

检测人工智能生成的文本对各个领域的组织都提出了挑战&#xff0c;包括学术界和新闻界等。生成式AI与大语言模型根据短描述来进行内容生成的能力&#xff0c;产生了一个问题&#xff1a;这篇文章/内容/作业/图像到底是由人类创作的&#xff0c;还是AI创作的&#xff1f;虽然 LL…...

Clion中怎么切换不同的程序运行

如下图&#xff0c;比如这个文件夹下面有那么多的项目&#xff1a; 那么我想切换不同的项目运行怎么办呢&#xff1f;如果想通过下图的Edit Configurations来设置是不行的&#xff1a; 解决办法&#xff1a; 如下图&#xff0c;选中项目的CMakeLists.txt&#xff0c;右键再点击…...

【C++初阶】C++入门(下)

【C初阶】C入门&#xff08;下&#xff09; &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f955;所属专栏&#xff1a;C&#x1f96d; &#x1f33c;文章目录&#x1f33c; 6. 引用 6.1 引用的概念 6.2 引用特性 6.3 常引用 6.4 使用场景 6.5 传值、传引用效率…...

【3】迁移学习模型

【3】迁移学习模型 文章目录 前言一、安装相关模块二、训练代码2.1. 管理预训练模型2.2. 模型训练代码2.3. 可视化结果2.4. 类别函数 总结 前言 主要简述一下训练代码 三叶青图像识别研究简概 一、安装相关模块 #xingyun的笔记本 print(xingyun的笔记本) %pip install d2l %…...

【工具分享】FOFA——网络空间测绘搜索引擎

文章目录 FOFA介绍FOFA语法其他引擎 FOFA介绍 FOFA官网&#xff1a;https://fofa.info/ FOFA&#xff08;Fingerprinting Organizations with Advanced Tools&#xff09;是一款网络空间测绘的搜索引擎&#xff0c;它专注于帮助用户收集和分析互联网上的设备和服务信息。FOFA…...

[嵌入式 C 语言] 按位与、或、取反、异或

若协议中如下图所示&#xff1a; 注意&#xff1a; 长度为1&#xff0c;表示1个字节&#xff0c;也就是0xFF&#xff0c;也就是 1111 1111 &#xff08;这里0xFF只是单纯表示一个数&#xff0c;也可以是其他数&#xff0c;这里需要注意的是1个字节的意思&#xff09; 一、按位…...

Android --- 运行时Fragment如何获取Activity中的数据,又如何将数据传递到Activity中呢?

1.通过 getActivity() 方法获取 Activity 实例&#xff1a; 在 Fragment 中&#xff0c;可以通过 getActivity() 方法获取当前 Fragment 所依附的 Activity 实例。然后可以调用 Activity 的公共方法或者直接访问 Activity 的字段来获取数据。 // 在 Fragment 中获取 Activity…...

Java后端开发(十三)-- Java8 stream的 orElse(null) 和 orElseGet(null)

orElse(null)表示如果一个都没找到返回null。【orElse()中可以塞默认值。如果找不到就会返回orElse中你自己设置的默认值。】 orElseGet(null)表示如果一个都没找到返回null。【orElseGet()中可以塞默认值。如果找不到就会返回orElseGet中你自己设置的默认值。】 区别就…...

L2 LangGraph_Components

参考自https://www.deeplearning.ai/short-courses/ai-agents-in-langgraph&#xff0c;以下为代码的实现。 这里用LangGraph把L1的ReAct_Agent实现&#xff0c;可以看出用LangGraph流程化了很多。 LangGraph Components import os from dotenv import load_dotenv, find_do…...

09.C2W4.Word Embeddings with Neural Networks

往期文章请点这里 目录 OverviewBasic Word RepresentationsIntegersOne-hot vectors Word EmbeddingsMeaning as vectorsWord embedding vectors Word embedding processWord Embedding MethodsBasic word embedding methodsAdvanced word embedding methods Continuous Bag-…...

硅谷甄选二(登录)

一、登录路由静态组件 src\views\login\index.vue <template><div class"login_container"><!-- Layout 布局 --><el-row><el-col :span"12" :xs"0"></el-col><el-col :span"12" :xs"2…...

scipy库中,不同应用滤波函数的区别,以及FIR滤波器和IIR滤波器的区别

一、在 Python 中&#xff0c;有多种函数可以用于应用 FIR/IIR 滤波器&#xff0c;每个函数的使用场景和特点各不相同。以下是一些常用的 FIR /IIR滤波器应用函数及其区别&#xff1a; from scipy.signal import lfiltery lfilter(fir_coeff, 1.0, x)from scipy.signal impo…...

wordpress 做网站/上海网络营销上海网络推广

ACPI包括很多功能&#xff0c;电源管理是其功能之一&#xff0c;具体的ACPI的介绍可以参考ACPI的技术文档。Linux中利用模块机制&#xff0c;实现ACPI对电源的管理&#xff1a;static struct cpufreq_driver acpi_cpufreq_driver {.verify acpi_cpufreq_verify,.target acpi_c…...

两台电脑一台做服务器 网站/爱站网权重查询

虽然微软说asp.net能够匹配各种手机设备&#xff0c;但是手机型号众多&#xff0c;微软收集的手机资料有限&#xff0c;所以导致asp.net对很多手机匹配错误&#xff0c;本来可以支持html的却生成html&#xff0c;本来只支持wml的&#xff0c;缺生成了html导致手机无法浏览&…...

网站建设及经营应解决好的问题/山东企业网站建设

1.Linux 发展出了另一种虚拟化技术&#xff1a;Linux 容器&#xff08;Linux Containers&#xff0c;缩写为 LXC&#xff09; 2.Linux 容器不是模拟一个完整的操作系统&#xff0c;而是对进程进行隔离 3.Docker 属于 Linux 容器的一种封装&#xff0c;提供简单易用的容器使用接…...

青岛西海岸新区城市建设局网站/b2b免费发布信息网站

第一篇&#xff1a;计算机技术与通信技术融合探析摘要&#xff1a;随着计算机技术和通信技术不断进步&#xff0c;在网络技术强大基础支撑下&#xff0c;计算机技术与通信技术已经开始实现融合&#xff0c;并将成为未来社会强大物质技术基础。从社会要求来看&#xff0c;计算机…...

招聘类网站建设/山东seo

这个学校的教务系统从大一用到了大三&#xff0c;给予我本人的感受有好有坏。先说说优点吧 1 方便简洁&#xff0c;当时我们大一还是老宿舍的时候网速特别慢&#xff0c;没有有线用电脑来选课查成绩是特别麻烦&#xff0c;这个平台就非常的快捷。 2 每次选体育&#xff0c;公选…...

网站推广优化趋势/免费seo课程

1. 前言 Linux中的netfilter提供了一个防火墙框架&#xff0c;具有很好的扩展性&#xff0c;除了自带的模块之外&#xff0c;用户可以根据自己的需求定义新的防火墙模块加入其中&#xff0c;而编程过程也不是很复杂&#xff0c;只要依葫芦画瓢即可&#xff0c;可在原来的类似…...