2

How do you send a HTTPS - GET/POST request using Nodemcu - Arduino code.

I've ben searching days for a working example that sends a GET request using HTTPS protocol to a website and all examples that I've found were unsuccessful.

I hope it will help others too!

Lepy
  • 152
  • 1
  • 12

1 Answers1

7

Here is the link that helped me

To make the examples work with the HTTPS protocol you would have to use the WiFiClientSecure library and call the client.setInsecure() function of the WiFiClientSecure's object you have.

Here is a fully working code:

#include <ESP8266WiFi.h>

const char* ssid     = "WIFI_SSID";
const char* password = "WIFI_PASS";

const char* host = "DOMAIN_NAME"; // only google.com not https://google.com

void setup() {
  Serial.begin(115200);
  delay(10);

  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  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());
}

void loop() {
  delay(5000);

  Serial.print("connecting to ");
  Serial.println(host);

  // Use WiFiClient class to create TCP connections
  WiFiClientSecure client;
  const int httpPort = 443; // 80 is for HTTP / 443 is for HTTPS!
  
  client.setInsecure(); // this is the magical line that makes everything work
  
  if (!client.connect(host, httpPort)) { //works!
    Serial.println("connection failed");
    return;
  }

  // We now create a URI for the request
  String url = "/arduino.php";
  url += "?data=";
  url += "aaaa";


  Serial.print("Requesting URL: ");
  Serial.println(url);

  // This will send the request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");

  Serial.println();
  Serial.println("closing connection");
}
Lepy
  • 152
  • 1
  • 12
  • 1
    The authoritative resource is the official example at https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/examples/BearSSL_Validation/BearSSL_Validation.ino Take a look at the various `fetchXYZ` functions to understand the differences. Using `setInsecure()` should be your last resort IMO. – Marcel Stör Nov 16 '20 at 10:34