一、简介
1.前言
很多时候我们需要ESP32去访问外网的服务器获取一些网络资源,HTTP服务器是最常见的服务器,在这个时候就需要ESP32作为HTTPClient使用,HttpClient是Apache中的一个开源的项目。它实现了HTTP标准中Client端的所有功能,使用它能够很容易地进行HTTP信息的传输。
HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。
HttpClient 相比传统 JDK 自带的 URLConnection,增加了易用性和灵活性,它不仅是客户端发送 HTTP 请求变得容易,而且也方便了开发人员测试接口(基于 HTTP 协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握 HttpClient 是很重要的必修内容,掌握 HttpClient 后,相信对于 HTTP 协议的了解会更加深入。
2.URL 基本介绍
平时我们俗称的”网址“,其实就是 URL(Uniform Resource Locator),翻译为统一资源定位符,互连网上的每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它
(1)URL 基本格式
-
URL 的标准格式如下:
协议类型:[//服务器地址[:端口号]][/资源层级 UNIX 文件路径]文件名[?查询字符串][#片段标识符]
-
URL 的完整格式如下:
协议类型:[//[访问资源需要的凭证信息@]服务器地址[:端口号]][/资源层级 UNIX 文件路径]文件名[?查询字符串][#片段标识符]
(2)URL 参数介绍
3.json解析
一般我们的http请求和响应都以json数据来进行交互,这里就先简略说下如何解析json数据,我们可以使用arduinoJson库和一个解析网站来完成这些工作
https://arduinojson.org/v6/assistant/#/step1
以我们这一篇JSON为例
{"results":[{"location":{"id":"WW7MBNP039PE","name":"泰安","country":"CN","path":"泰安,泰安,山东,中国","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},"now":{"text":"晴","code":"0","temperature":"28"},"last_update":"2020-09-09T10:09:00+08:00"}]}
我们只需要先安装arduinoJson库,然后进入这个网站
输入需要解析的文件
然后就可以生成对于的解析代码了
关于arduinoJson的使用后面再详细讲解。
二、相关函数
使用时包含头文件:
#include <HTTPClient.h>
1. 创建对象
HTTPClient http;
2. HTTPClient对象初始化
/**
* 解析url以获得所有参数,默认port是80端口
* @param url String
*/
bool begin(String url);
/**
* 解析url以获得所有参数,默认port是80端口
* @param client : 传入一个网络连接客户端
* @param url String
*/
bool begin(WiFiClient &client, String url);
/**
* 设置host port 以及uri
* @param host String(192.168.1.12,不需要带上http://前缀)
* @param port uint16_t
* @param uri String
*/
bool begin(String host, uint16_t port, String uri = "/");
/**
* 设置host port 以及uri
* @param client 传入一个网络连接客户端
* @param host String(192.168.1.12,不需要带上http://前缀)
* @param port uint16_t
* @param uri String
* @param https bool 是否启用https
*/
bool begin(WiFiClient &client, String host, uint16_t port, String uri = "/", bool https = false);
/**
* 设置host port 以及uri
* @param host String(192.168.1.12,不需要带上http://前缀)
* @param port uint16_t
* @param uri String
* @param CAcert CA证书(https)
*/
bool begin(String host, uint16_t port, String uri, const char* CAcert);
bool begin(String host, uint16_t port, String uri, const char* CAcert, const char* cli_cert, const char* cli_key);

最低0.47元/天 解锁文章
524

被折叠的 条评论
为什么被折叠?



