ESP8266访问https地址,ESP32

文章介绍了如何在Arduino项目中使用ESP8266模块通过HTTPS连接上传数据,强调了在HTTPS连接中验证网站指纹证书的重要性,并详细展示了代码示例,包括设置Fingerprint和使用HTTPClient库进行通信的过程。

做了一个小项目,使用的ESP8266 访问https地址来上传数据(虽然直接使用TCP连接来传可能更方便,但对方要求通过访问https我也只能照做)arduino中有ESP8266HTTPClient来进行http和https连接,http连接则比较简单,直接使用示例程序修改即可,而https还需要验证网站指纹证书。实际使用如下

void http_post() {
  date_str = (char *) malloc(strlen(URL) +7 );
  sprintf(date_str, "%s%s%c%s",URL,temc,'/',humc);//合成访问地址
  Serial.println(date_str);
    std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure);
    client->setFingerprint(fingerprint);
    HTTPClient https;//根据访问地址的协议来选择使用http还是https,用https就需要使用网站的证书
    Serial.print("[HTTPS] begin...\n");
    if (https.begin(*client, date_str)) {  // HTTPS

      Serial.print("[HTTPS] GET...\n");
      // start connection and send HTTP header
      int httpCode = https.GET();

      // httpCode will be negative on error
      if (httpCode > 0) {
        // HTTP header has been send and Server response header has been handled
        Serial.printf("[HTTPS] GET... code: %d\n", httpCode);

        // file found at server
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
          String payload = https.getString();
          Serial.println(payload);
        }
      } else {
        Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str());
      }

      https.end();
    } else {
      Serial.printf("[HTTPS] Unable to connect\n");
    }

}

date_str就是最终的访问地址,fingerprint就是需要验证的网站指纹证书,格式如下

const uint8_t fingerprint[20] = {0xDE, 0x17, 0x1D, 0xD8, 0xC0, 0xE9, 0xDF, 0x28 ,0xB3 ,0xCD ,0x38 ,0x0E ,0x80 ,0xA4 ,0x2A ,0xF3
,0x28 ,0xC3 ,0x28 ,0x4E};//网站证书指纹

具体如何获取可以借用浏览器来获取,比如访问https://www.baidu.com/

首先使用浏览器打开(可用edge,Chrome,这里用的edge)

点击锁的图形,然后点击连接安全选项,再点右上方的证书图形

点开后就可以看到网站的指纹证书了

我们需要的是SHA-1,把这串指纹填入我们程序就行了(记得改好格式,16进制就需要加0x)

资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 ESP8266是一款广受欢迎的Wi-Fi模块,常用于物联网(IoT)设备,因其体积小巧、功耗低且功能强大。在本项目中,我们着重探讨如何利用ESP8266发起HTTPS请求以访问安全的API接口。HTTPS是HTTP的安全版本,通过SSL/TLS协议对通信进行加密,确保数据传输的安全性。 HTTPS(Hypertext Transfer Protocol Secure)基于HTTP协议,通过SSL/TLS(Secure Sockets Layer/Transport Layer Security)提供安全传输服务。 SSL/TLS的核心作用是建立加密通道,防止中间人攻击,保障数据的机密性和完整性。 证书机制是HTTPS安全的关键。服务器通常需要持有由权威证书颁发机构(CA)签名的数字证书,以证明其身份。 ESP8266内置TCP/IP协议栈,支持Wi-Fi连接,能够实现HTTP/HTTPS请求。 要在ESP8266上实现HTTPS请求,需使用支持SSL/TLS的库,例如Arduino的ESP8266HTTPClient库。 ESP8266HTTPClient库提供API,方便开发者发起GET、POST等HTTP请求,并处理响应。 在Arduino IDE中,通过Library Manager搜索并安装该库。 初始化HTTPClient对象,设置以https://开头的API接口URL。 使用begin()方法指定URL并启动HTTPS连接。如果服务器证书有效,连接将成功建立。 发起GET或POST请求,如GET请求用GET()方法,POST请求用POST()方法,可传递参数。 使用sendRequest()发送请求,通过available()检查响应是否准备好,用getString()或
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山间朝暮-CanEve

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值