Permalink
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
arduino-esp32/libraries/HTTPClient/examples/BasicHttpsClient/BasicHttpsClient.ino
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
147 lines (120 sloc)
5.01 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
BasicHTTPSClient.ino | |
Created on: 14.10.2018 | |
*/ | |
#include <Arduino.h> | |
#include <WiFi.h> | |
#include <WiFiMulti.h> | |
#include <HTTPClient.h> | |
#include <WiFiClientSecure.h> | |
// This is GandiStandardSSLCA2.pem, the root Certificate Authority that signed | |
// the server certifcate for the demo server https://jigsaw.w3.org in this | |
// example. This certificate is valid until Sep 11 23:59:59 2024 GMT | |
const char* rootCACertificate = \ | |
"-----BEGIN CERTIFICATE-----\n" \ | |
"MIIF6TCCA9GgAwIBAgIQBeTcO5Q4qzuFl8umoZhQ4zANBgkqhkiG9w0BAQwFADCB\n" \ | |
"iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl\n" \ | |
"cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV\n" \ | |
"BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQw\n" \ | |
"OTEyMDAwMDAwWhcNMjQwOTExMjM1OTU5WjBfMQswCQYDVQQGEwJGUjEOMAwGA1UE\n" \ | |
"CBMFUGFyaXMxDjAMBgNVBAcTBVBhcmlzMQ4wDAYDVQQKEwVHYW5kaTEgMB4GA1UE\n" \ | |
"AxMXR2FuZGkgU3RhbmRhcmQgU1NMIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n" \ | |
"DwAwggEKAoIBAQCUBC2meZV0/9UAPPWu2JSxKXzAjwsLibmCg5duNyj1ohrP0pIL\n" \ | |
"m6jTh5RzhBCf3DXLwi2SrCG5yzv8QMHBgyHwv/j2nPqcghDA0I5O5Q1MsJFckLSk\n" \ | |
"QFEW2uSEEi0FXKEfFxkkUap66uEHG4aNAXLy59SDIzme4OFMH2sio7QQZrDtgpbX\n" \ | |
"bmq08j+1QvzdirWrui0dOnWbMdw+naxb00ENbLAb9Tr1eeohovj0M1JLJC0epJmx\n" \ | |
"bUi8uBL+cnB89/sCdfSN3tbawKAyGlLfOGsuRTg/PwSWAP2h9KK71RfWJ3wbWFmV\n" \ | |
"XooS/ZyrgT5SKEhRhWvzkbKGPym1bgNi7tYFAgMBAAGjggF1MIIBcTAfBgNVHSME\n" \ | |
"GDAWgBRTeb9aqitKz1SA4dibwJ3ysgNmyzAdBgNVHQ4EFgQUs5Cn2MmvTs1hPJ98\n" \ | |
"rV1/Qf1pMOowDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYD\n" \ | |
"VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCIGA1UdIAQbMBkwDQYLKwYBBAGy\n" \ | |
"MQECAhowCAYGZ4EMAQIBMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNl\n" \ | |
"cnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNy\n" \ | |
"bDB2BggrBgEFBQcBAQRqMGgwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQudXNlcnRy\n" \ | |
"dXN0LmNvbS9VU0VSVHJ1c3RSU0FBZGRUcnVzdENBLmNydDAlBggrBgEFBQcwAYYZ\n" \ | |
"aHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAWGf9\n" \ | |
"crJq13xhlhl+2UNG0SZ9yFP6ZrBrLafTqlb3OojQO3LJUP33WbKqaPWMcwO7lWUX\n" \ | |
"zi8c3ZgTopHJ7qFAbjyY1lzzsiI8Le4bpOHeICQW8owRc5E69vrOJAKHypPstLbI\n" \ | |
"FhfFcvwnQPYT/pOmnVHvPCvYd1ebjGU6NSU2t7WKY28HJ5OxYI2A25bUeo8tqxyI\n" \ | |
"yW5+1mUfr13KFj8oRtygNeX56eXVlogMT8a3d2dIhCe2H7Bo26y/d7CQuKLJHDJd\n" \ | |
"ArolQ4FCR7vY4Y8MDEZf7kYzawMUgtN+zY+vkNaOJH1AQrRqahfGlZfh8jjNp+20\n" \ | |
"J0CT33KpuMZmYzc4ZCIwojvxuch7yPspOqsactIGEk72gtQjbz7Dk+XYtsDe3CMW\n" \ | |
"1hMwt6CaDixVBgBwAc/qOR2A24j3pSC4W/0xJmmPLQphgzpHphNULB7j7UTKvGof\n" \ | |
"KA5R2d4On3XNDgOVyvnFqSot/kGkoUeuDcL5OWYzSlvhhChZbH2UF3bkRYKtcCD9\n" \ | |
"0m9jqNf6oDP6N8v3smWe2lBvP+Sn845dWDKXcCMu5/3EFZucJ48y7RetWIExKREa\n" \ | |
"m9T8bJUox04FB6b9HbwZ4ui3uRGKLXASUoWNjDNKD/yZkuBjcNqllEdjB+dYxzFf\n" \ | |
"BT02Vf6Dsuimrdfp5gJ0iHRc2jTbkNJtUQoj1iM=\n" \ | |
"-----END CERTIFICATE-----\n"; | |
// Not sure if WiFiClientSecure checks the validity date of the certificate. | |
// Setting clock just to be sure... | |
void setClock() { | |
configTime(0, 0, "pool.ntp.org"); | |
Serial.print(F("Waiting for NTP time sync: ")); | |
time_t nowSecs = time(nullptr); | |
while (nowSecs < 8 * 3600 * 2) { | |
delay(500); | |
Serial.print(F(".")); | |
yield(); | |
nowSecs = time(nullptr); | |
} | |
Serial.println(); | |
struct tm timeinfo; | |
gmtime_r(&nowSecs, &timeinfo); | |
Serial.print(F("Current time: ")); | |
Serial.print(asctime(&timeinfo)); | |
} | |
WiFiMulti WiFiMulti; | |
void setup() { | |
Serial.begin(115200); | |
// Serial.setDebugOutput(true); | |
Serial.println(); | |
Serial.println(); | |
Serial.println(); | |
WiFi.mode(WIFI_STA); | |
WiFiMulti.addAP("SSID", "PASSWORD"); | |
// wait for WiFi connection | |
Serial.print("Waiting for WiFi to connect..."); | |
while ((WiFiMulti.run() != WL_CONNECTED)) { | |
Serial.print("."); | |
} | |
Serial.println(" connected"); | |
setClock(); | |
} | |
void loop() { | |
WiFiClientSecure *client = new WiFiClientSecure; | |
if(client) { | |
client -> setCACert(rootCACertificate); | |
{ | |
// Add a scoping block for HTTPClient https to make sure it is destroyed before WiFiClientSecure *client is | |
HTTPClient https; | |
Serial.print("[HTTPS] begin...\n"); | |
if (https.begin(*client, "https://jigsaw.w3.org/HTTP/connection.html")) { // 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"); | |
} | |
// End extra scoping block | |
} | |
delete client; | |
} else { | |
Serial.println("Unable to create client"); | |
} | |
Serial.println(); | |
Serial.println("Waiting 10s before the next round..."); | |
delay(10000); | |
} |