###### 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) {
...
```
這當然不是正規的作法, 使用前請三思。