---
# System prepended metadata

title: 在 ESP8266/ESP32 使用 HTTPClient 連接 https 網站
tags: [HTTPClient, ESP8266, ESP32]

---

###### tags: `ESP32` `ESP8266` `HTTPClient`

# 在 ESP8266/ESP32 使用 HTTPClient 連接 https 網站

HTTPClient 是個好用的程式庫, 只要叫用其中的 get(）等方法就可以幫我們進行 HTTP 請求。不過如果你要連接的是 HTTPS 網站, 正規的作法是你得在程式中驗證連線的網站所提供的電子憑證, 這得在你的程式裡加上憑證相關的資訊, 而且因為憑證是有期限的, 這也表示現在可以正常運作的程式, 可能在一段時間後就會因憑證失效而出錯。

但如果**你不那麼在意連線的是不是假網站, 不想驗證憑證的正確性**, 那麼可以使用只要網址的 HTTPClient.begin(), 但提供 https 的網址, 不用提供憑證, 沒有提供憑證的情況下, [程式庫預設的方式](https://github.com/espressif/arduino-esp32/blob/23820874ecd1be9b3831d9cd3ff271873f8df993/libraries/HTTPClient/src/HTTPClient.cpp#L78)就是略過檢查憑證：

```cpp=74
    bool verify(WiFiClient& client, const char* host) override
    {
        WiFiClientSecure& wcs = static_cast<WiFiClientSecure&>(client);
        if (_cacert == nullptr) {
            wcs.setInsecure();
        } else {
            wcs.setCACert(_cacert);
            wcs.setCertificate(_clicert);
            wcs.setPrivateKey(_clikey);
        }
        return true;
    }
...
```

78 行的 setInsecure() 會在[連線時略過憑證的檢查](https://github.com/espressif/arduino-esp32/blob/23820874ecd1be9b3831d9cd3ff271873f8df993/libraries/WiFiClientSecure/src/ssl_client.cpp#L125)：

```cpp=125
    if (insecure) {
        mbedtls_ssl_conf_authmode(&ssl_client->ssl_conf, MBEDTLS_SSL_VERIFY_NONE);
        log_i("WARNING: Skipping SSL Verification. INSECURE!");
    } else if (rootCABuff != NULL) {
...
```

這當然不是正規的作法, 使用前請三思。