mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-21 10:26:06 +03:00
* Don't return `true` with WiFiClientSecureBearSSL::connected() when disconnected Apply the same condition as with normal WiFiClient - we are not connected when it's not possible to both write and read. Implement separate methods for actual connection status and the internal ssl engine status and update methods that were previously using available() for this purpose Update examples to check available() when the intent is to only read the data and not interact with the client in any other way. Also, use connect() as a way to notify errors, no need to check things twice
101 lines
2.6 KiB
C++
101 lines
2.6 KiB
C++
/*
|
|
HTTP over TLS (HTTPS) example sketch
|
|
|
|
This example demonstrates how to use
|
|
WiFiClientSecure class to access HTTPS API.
|
|
We fetch and display the status of
|
|
esp8266/Arduino project continuous integration
|
|
build.
|
|
|
|
Created by Ivan Grokhotkov, 2015.
|
|
This example is in public domain.
|
|
*/
|
|
|
|
#include <ESP8266WiFi.h>
|
|
#include <WiFiClientSecure.h>
|
|
#include "certs.h"
|
|
|
|
#ifndef STASSID
|
|
#define STASSID "your-ssid"
|
|
#define STAPSK "your-password"
|
|
#endif
|
|
|
|
const char* ssid = STASSID;
|
|
const char* password = STAPSK;
|
|
|
|
X509List cert(cert_DigiCert_Global_Root_CA);
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
Serial.println();
|
|
Serial.print("Connecting to ");
|
|
Serial.println(ssid);
|
|
WiFi.mode(WIFI_STA);
|
|
WiFi.begin(ssid, password);
|
|
while (WiFi.status() != WL_CONNECTED) {
|
|
delay(500);
|
|
Serial.print(".");
|
|
}
|
|
Serial.println("");
|
|
Serial.println("WiFi connected");
|
|
Serial.println("IP address: ");
|
|
Serial.println(WiFi.localIP());
|
|
|
|
// Set time via NTP, as required for x.509 validation
|
|
configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov");
|
|
|
|
Serial.print("Waiting for NTP time sync: ");
|
|
time_t now = time(nullptr);
|
|
while (now < 8 * 3600 * 2) {
|
|
delay(500);
|
|
Serial.print(".");
|
|
now = time(nullptr);
|
|
}
|
|
Serial.println("");
|
|
struct tm timeinfo;
|
|
gmtime_r(&now, &timeinfo);
|
|
Serial.print("Current time: ");
|
|
Serial.print(asctime(&timeinfo));
|
|
|
|
// Use WiFiClientSecure class to create TLS connection
|
|
WiFiClientSecure client;
|
|
Serial.print("Connecting to ");
|
|
Serial.println(github_host);
|
|
|
|
Serial.printf("Using certificate: %s\n", cert_DigiCert_Global_Root_CA);
|
|
client.setTrustAnchors(&cert);
|
|
|
|
if (!client.connect(github_host, github_port)) {
|
|
Serial.println("Connection failed");
|
|
return;
|
|
}
|
|
|
|
String url = "/repos/esp8266/Arduino/commits/master/status";
|
|
Serial.print("Requesting URL: ");
|
|
Serial.println(url);
|
|
|
|
client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + github_host + "\r\n" + "User-Agent: BuildFailureDetectorESP8266\r\n" + "Connection: close\r\n\r\n");
|
|
|
|
Serial.println("Request sent");
|
|
while (client.available()) {
|
|
String line = client.readStringUntil('\n');
|
|
if (line == "\r") {
|
|
Serial.println("Headers received");
|
|
break;
|
|
}
|
|
}
|
|
String line = client.readStringUntil('\n');
|
|
if (line.startsWith("{\"state\":\"success\"")) {
|
|
Serial.println("esp8266/Arduino CI successful!");
|
|
} else {
|
|
Serial.println("esp8266/Arduino CI has failed");
|
|
}
|
|
Serial.println("Reply was:");
|
|
Serial.println("==========");
|
|
Serial.println(line);
|
|
Serial.println("==========");
|
|
Serial.println("Closing connection");
|
|
}
|
|
|
|
void loop() {}
|