ESP32 WiFiClientSecure Library – write

Home / References / ESP32 Library / WiFiClientSecure

Description

The write method in the WiFiClientSecure library sends data to a server over a secure TLS connection. It is used to transmit bytes or strings, making it a fundamental tool for crafting HTTPS requests or other secure communications in IoT applications.


Syntax and Usage

The write method offers the following distinct ways to send data, each suited to different scenarios. Here’s how you can use it:

Writing a single byte:

client.write(data);

Send a single byte of data to the connected endpoint.

Writing a buffer of bytes:

client.write(buf, size);

Send a sequence of bytes from a memory buffer, with a specified length.

Writing PROGMEM data:

client.write_P(buf, size);

Send a buffer of bytes stored in PROGMEM (program memory), useful for conserving RAM.

For practical applications and examples of this method, please consult the “Example Code” section on this page. This section provides comprehensive guidance to help you better understand and apply the method effectively.


Argument(s)

The write method’s arguments vary depending on the usage. Here’s a detailed list:

  • data: An unsigned 8-bit integer (uint8_t) representing a single byte to send. Used for single-byte writes.
  • buf: A pointer to an array of bytes (const uint8_t*) in RAM containing the data to send. Used with buffer writes.
  • size: An integer (size_t) specifying the number of bytes to send from the buffer. Used with buffer and PROGMEM writes.
  • buf (PROGMEM): A pointer to a PROGMEM-stored buffer (PGM_P) containing the data to send. Used for PROGMEM writes.

Return Value

The write method returns a size_t value indicating the number of bytes successfully written to the connection. A return value of 0 typically means no data was sent, possibly due to a failed connection or empty input. Checking this value ensures your data transmission worked as intended.


Example Code

Below are example codes demonstrating how to use the write method, adapted from the reference code provided.

Example 1: Writing a Single Byte

This example code is designed to establish a secure HTTPS connection from an ESP32 microcontroller to a web server, specifically “www.httpbin.org,” and send an HTTP POST request byte-by-byte using ESP32 WiFiClient Library’s write method..

ATTENTION: The Root CA certificate has an expiration date. If this code fails to execute, acquire the most up-to-date Root CA certificate. To find out more details about how to acquire the Root CA certificate, please check out this link below:
How to Acquire the Root CA Certificate

/*
 * Author: Avant Maker
 * Date: February 24, 2025
 * Version: 1.0
 *
 * Description: This example connects to www.httpbin.org
 * securely and send a HTTP POST request byte-by-byte using
 * ESP32 WiFiClient Library's write method.
 * The server’s response is printed to the Serial monitor,
 * proving the data was received.
 * 
 * ATTENTION: The Root CA certificate has an expiration date.
 * If this code fails to execute, acquire the most up-to-date
 * Root CA certificate.
 * To find out more details about how to acquire the Root CA
 * certificate of www.httpbin.org, please check out this link below:
 *
 * https://avantmaker.com/references/esp32-arduino-core-index/esp32-wificlientsecure-library/how-to-acquire-the-root-ca-certificate/
 *
 * License: MIT 
 * 
 * Code Source: This example code is sourced from the Comprehensive 
 * Guide to the ESP32 Arduino Core Library, accessible on 
 * AvantMaker.com. For additional code examples and in-depth 
 * documentation related to the ESP32 Arduino Core Library, 
 * please visit:
 *
 * https://avantmaker.com/references/esp32-arduino-core-index/
 *
 * AvantMaker.com, your premier destination for all things 
 * DIY, AI, IoT, Smart Home, and STEM projects. We are dedicated 
 * to empowering makers, learners, and enthusiasts with the resources
 * they need to bring their innovative ideas to life.
 */

#include <WiFi.h>
#include <NetworkClientSecure.h>

const char* ssid = "your-SSID";          // Replace with your Wi-Fi SSID
const char* password = "your-PASSWORD";  // Replace with your Wi-Fi password

const char* host = "www.httpbin.org";
const int port = 443;

// Root CA certificate for www.httpbin.org (update with your server's CA if different)
const char* rootCACert = R"literal(
-----BEGIN CERTIFICATE-----
MIIEXjCCA0agAwIBAgITB3MSSkvL1E7HtTvq8ZSELToPoTANBgkqhkiG9w0BAQsF
ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6
b24gUm9vdCBDQSAxMB4XDTIyMDgyMzIyMjUzMFoXDTMwMDgyMzIyMjUzMFowPDEL
MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEcMBoGA1UEAxMTQW1hem9uIFJT
QSAyMDQ4IE0wMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtDGMZa
qHneKei1by6+pUPPLljTB143Si6VpEWPc6mSkFhZb/6qrkZyoHlQLbDYnI2D7hD0
sdzEqfnuAjIsuXQLG3A8TvX6V3oFNBFVe8NlLJHvBseKY88saLwufxkZVwk74g4n
WlNMXzla9Y5F3wwRHwMVH443xGz6UtGSZSqQ94eFx5X7Tlqt8whi8qCaKdZ5rNak
+r9nUThOeClqFd4oXych//Rc7Y0eX1KNWHYSI1Nk31mYgiK3JvH063g+K9tHA63Z
eTgKgndlh+WI+zv7i44HepRZjA1FYwYZ9Vv/9UkC5Yz8/yU65fgjaE+wVHM4e/Yy
C2osrPWE7gJ+dXMCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYD
VR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNV
HQ4EFgQUwDFSzVpQw4J8dHHOy+mc+XrrguIwHwYDVR0jBBgwFoAUhBjMhTTsvAyU
lC4IWZzHshBOCggwewYIKwYBBQUHAQEEbzBtMC8GCCsGAQUFBzABhiNodHRwOi8v
b2NzcC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbTA6BggrBgEFBQcwAoYuaHR0cDov
L2NydC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbS9yb290Y2ExLmNlcjA/BgNVHR8E
ODA2MDSgMqAwhi5odHRwOi8vY3JsLnJvb3RjYTEuYW1hem9udHJ1c3QuY29tL3Jv
b3RjYTEuY3JsMBMGA1UdIAQMMAowCAYGZ4EMAQIBMA0GCSqGSIb3DQEBCwUAA4IB
AQAtTi6Fs0Azfi+iwm7jrz+CSxHH+uHl7Law3MQSXVtR8RV53PtR6r/6gNpqlzdo
Zq4FKbADi1v9Bun8RY8D51uedRfjsbeodizeBB8nXmeyD33Ep7VATj4ozcd31YFV
fgRhvTSxNrrTlNpWkUk0m3BMPv8sg381HhA6uEYokE5q9uws/3YkKqRiEz3TsaWm
JqIRZhMbgAfp7O7FUwFIb7UIspogZSKxPIWJpxiPo3TcBambbVtQOcNRWz5qCQdD
slI2yayq0n2TXoHyNCLEH8rpsJRVILFsg0jc7BaFrMnF462+ajSehgj12IidNeRN
4zl+EoNaWdpnWndvSpAEkq2P
-----END CERTIFICATE-----
)literal";

// Optional: Add client certificate and key for mutual TLS if needed
// const char* clientCertKey = "";
// const char* clientCert = "";

NetworkClientSecure secureClient;

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

    // Connect Wifi
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("Connected to WiFi");

    // set ROOT CA Cert
    secureClient.setCACert(rootCACert);

    // Establish secure connection to server
    if (secureClient.connect(host, port)) {
        Serial.println("Connected to server");

        // Define the POST request
        const char* request = "POST /post HTTP/1.1\r\n"
                        "Host: www.httpbin.org\r\n"
                        "Content-Type: application/x-www-form-urlencoded\r\n"
                        "Content-Length: 27\r\n"
                        "Connection: close\r\n"
                        "\r\n"
                        "AvantMaker=Hello from ESP32";
                        
        size_t bytesWritten = 0;

        for (int i = 0; i < strlen(request); i++) {
            bytesWritten += secureClient.write(request[i]);
        }
        Serial.print("Total bytes written: ");
        Serial.println(bytesWritten);
        
        // Wait for and display server response
        delay(1000); // Give server time to respond
        Serial.println("Server response:");
        while (secureClient.available()) {
            char c = secureClient.read();
            Serial.write(c);
        }

        // Close connection
        secureClient.stop();
        Serial.println("\nConnection closed");
    } else {
      Serial.println("Connection failed. Check code description for solution.");
    }    
}

void loop() {

}

Example 2: Writing a Buffer of Bytes

This example is designed to establish a secure HTTPS connection from an ESP32 microcontroller to a web server, specifically “www.httpbin.org,” and send a full HTTP POST request to www.httpbin.org using a buffer of bytes, showcasing how to use ESP32 WiFIClientSecure Library’s write method to transmit structured data.

ATTENTION: The Root CA certificate has an expiration date. If this code fails to execute, acquire the most up-to-date Root CA certificate. To find out more details about how to acquire the Root CA certificate of www.httpbin.org, please check out this link below:
How to Acquire the Root CA Certificate

/*
 * Author: Avant Maker
 * Date: February 24, 2025
 * Version: 1.0
 *
 * Description: This example is designed to establish a 
 * secure HTTPS connection from an ESP32 microcontroller 
 * to a web server and send a full HTTP POST request to
 * using a buffer of bytes, showcasing how to use
 * ESP32 WiFIClientSecure Library's write method to 
 * transmit structured data.
 * 
 * ATTENTION: The Root CA certificate has an expiration date.
 * If this code fails to execute, acquire the most up-to-date
 * Root CA certificate.
 * To find out more details about how to acquire the Root CA
 * certificate of www.httpbin.org, please check out this link below:
 *
 * https://avantmaker.com/references/esp32-arduino-core-index/esp32-wificlientsecure-library/how-to-acquire-the-root-ca-certificate/
 *
 * License: MIT 
 * 
 * Code Source: This example code is sourced from the Comprehensive 
 * Guide to the ESP32 Arduino Core Library, accessible on 
 * AvantMaker.com. For additional code examples and in-depth 
 * documentation related to the ESP32 Arduino Core Library, 
 * please visit:
 *
 * https://avantmaker.com/references/esp32-arduino-core-index/
 *
 * AvantMaker.com, your premier destination for all things 
 * DIY, AI, IoT, Smart Home, and STEM projects. We are dedicated 
 * to empowering makers, learners, and enthusiasts with the resources
 * they need to bring their innovative ideas to life.
 */
 
#include <WiFi.h>
#include <NetworkClientSecure.h>

const char* ssid = "your-SSID";          // Replace with your Wi-Fi SSID
const char* password = "your-PASSWORD";  // Replace with your Wi-Fi password

const char* host = "www.httpbin.org";
const int port = 443;

// Root CA certificate for www.httpbin.org (update with your server's CA if different)
const char* rootCACert = R"literal(
-----BEGIN CERTIFICATE-----
MIIEXjCCA0agAwIBAgITB3MSSkvL1E7HtTvq8ZSELToPoTANBgkqhkiG9w0BAQsF
ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6
b24gUm9vdCBDQSAxMB4XDTIyMDgyMzIyMjUzMFoXDTMwMDgyMzIyMjUzMFowPDEL
MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEcMBoGA1UEAxMTQW1hem9uIFJT
QSAyMDQ4IE0wMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtDGMZa
qHneKei1by6+pUPPLljTB143Si6VpEWPc6mSkFhZb/6qrkZyoHlQLbDYnI2D7hD0
sdzEqfnuAjIsuXQLG3A8TvX6V3oFNBFVe8NlLJHvBseKY88saLwufxkZVwk74g4n
WlNMXzla9Y5F3wwRHwMVH443xGz6UtGSZSqQ94eFx5X7Tlqt8whi8qCaKdZ5rNak
+r9nUThOeClqFd4oXych//Rc7Y0eX1KNWHYSI1Nk31mYgiK3JvH063g+K9tHA63Z
eTgKgndlh+WI+zv7i44HepRZjA1FYwYZ9Vv/9UkC5Yz8/yU65fgjaE+wVHM4e/Yy
C2osrPWE7gJ+dXMCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYD
VR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNV
HQ4EFgQUwDFSzVpQw4J8dHHOy+mc+XrrguIwHwYDVR0jBBgwFoAUhBjMhTTsvAyU
lC4IWZzHshBOCggwewYIKwYBBQUHAQEEbzBtMC8GCCsGAQUFBzABhiNodHRwOi8v
b2NzcC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbTA6BggrBgEFBQcwAoYuaHR0cDov
L2NydC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbS9yb290Y2ExLmNlcjA/BgNVHR8E
ODA2MDSgMqAwhi5odHRwOi8vY3JsLnJvb3RjYTEuYW1hem9udHJ1c3QuY29tL3Jv
b3RjYTEuY3JsMBMGA1UdIAQMMAowCAYGZ4EMAQIBMA0GCSqGSIb3DQEBCwUAA4IB
AQAtTi6Fs0Azfi+iwm7jrz+CSxHH+uHl7Law3MQSXVtR8RV53PtR6r/6gNpqlzdo
Zq4FKbADi1v9Bun8RY8D51uedRfjsbeodizeBB8nXmeyD33Ep7VATj4ozcd31YFV
fgRhvTSxNrrTlNpWkUk0m3BMPv8sg381HhA6uEYokE5q9uws/3YkKqRiEz3TsaWm
JqIRZhMbgAfp7O7FUwFIb7UIspogZSKxPIWJpxiPo3TcBambbVtQOcNRWz5qCQdD
slI2yayq0n2TXoHyNCLEH8rpsJRVILFsg0jc7BaFrMnF462+ajSehgj12IidNeRN
4zl+EoNaWdpnWndvSpAEkq2P
-----END CERTIFICATE-----
)literal";

// Optional: Add client certificate and key for mutual TLS if needed
// const char* clientCertKey = "";
// const char* clientCert = "";

NetworkClientSecure secureClient;

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

    // Connect Wifi
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("Connected to WiFi");

    // set ROOT CA Cert
    secureClient.setCACert(rootCACert);

    // Establish secure connection to server
    if (secureClient.connect(host, port)) {
        Serial.println("Connected to server");

        // Define the POST request
        const char* request = "POST /post HTTP/1.1\r\n"
                        "Host: www.httpbin.org\r\n"
                        "Content-Type: application/x-www-form-urlencoded\r\n"
                        "Content-Length: 27\r\n"
                        "Connection: close\r\n"
                        "\r\n"
                        "AvantMaker=Hello from ESP32";
        
        // Send POST request
        secureClient.write((const uint8_t*)request, strlen(request));

        // Wait for and display server response
        delay(1000); // Give server time to respond
        Serial.println("Server response:");
        while (secureClient.available()) {
            char c = secureClient.read();
            Serial.write(c);
        }

        // Close connection
        secureClient.stop();
        Serial.println("\nConnection closed");
    } else {
      Serial.println("Connection failed. Check code description for solution.");
    }      
}

void loop() {
}

Example 3: Writing PROGMEM Data

This example stores an POST request in PROGMEM and sends it to www.httpbin.org, demonstrating secure and RAM-efficient data transmission with ESP32 WiFIClientSecure Library’s write method.

This example is designed to establish a secure HTTPS connection from an ESP32 microcontroller to a web server, specifically “www.httpbin.org,” and send a full HTTP POST request to www.httpbin.org using a buffer of bytes, showcasing how to use ESP32 WiFIClientSecure Library’s write method to transmit structured data.

ATTENTION: The Root CA certificate has an expiration date. If this code fails to execute, acquire the most up-to-date Root CA certificate. To find out more details about how to acquire the Root CA certificate of www.httpbin.org, please check out this link below:
How to Acquire the Root CA Certificate

/*
 * Author: Avant Maker
 * Date: February 24, 2025
 * Version: 1.0
 *
 * Description: This example stores an POST request in
 * PROGMEM and sends it to www.httpbin.org, demonstrating
 * secure and RAM-efficient data transmission with
 * ESP32 WiFIClientSecure Library's write method.
 * 
 * ATTENTION: The Root CA certificate has an expiration date.
 * If this code fails to execute, acquire the most up-to-date
 * Root CA certificate.
 * To find out more details about how to acquire the Root CA
 * certificate of www.httpbin.org, please check out this link below:
 *
 * https://avantmaker.com/references/esp32-arduino-core-index/esp32-wificlientsecure-library/how-to-acquire-the-root-ca-certificate/
 *
 * License: MIT 
 * 
 * Code Source: This example code is sourced from the Comprehensive 
 * Guide to the ESP32 Arduino Core Library, accessible on 
 * AvantMaker.com. For additional code examples and in-depth 
 * documentation related to the ESP32 Arduino Core Library, 
 * please visit:
 *
 * https://avantmaker.com/references/esp32-arduino-core-index/
 *
 * AvantMaker.com, your premier destination for all things 
 * DIY, AI, IoT, Smart Home, and STEM projects. We are dedicated 
 * to empowering makers, learners, and enthusiasts with the resources
 * they need to bring their innovative ideas to life.
 */
 

#include <WiFi.h>
#include <NetworkClientSecure.h>

const char* ssid = "your-SSID";          // Replace with your Wi-Fi SSID
const char* password = "your-PASSWORD";  // Replace with your Wi-Fi password

const char* host = "www.httpbin.org";
const int port = 443;

// Root CA certificate for www.httpbin.org (update with your server's CA if different)
const char* rootCACert = R"literal(
-----BEGIN CERTIFICATE-----
MIIEXjCCA0agAwIBAgITB3MSSkvL1E7HtTvq8ZSELToPoTANBgkqhkiG9w0BAQsF
ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6
b24gUm9vdCBDQSAxMB4XDTIyMDgyMzIyMjUzMFoXDTMwMDgyMzIyMjUzMFowPDEL
MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEcMBoGA1UEAxMTQW1hem9uIFJT
QSAyMDQ4IE0wMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtDGMZa
qHneKei1by6+pUPPLljTB143Si6VpEWPc6mSkFhZb/6qrkZyoHlQLbDYnI2D7hD0
sdzEqfnuAjIsuXQLG3A8TvX6V3oFNBFVe8NlLJHvBseKY88saLwufxkZVwk74g4n
WlNMXzla9Y5F3wwRHwMVH443xGz6UtGSZSqQ94eFx5X7Tlqt8whi8qCaKdZ5rNak
+r9nUThOeClqFd4oXych//Rc7Y0eX1KNWHYSI1Nk31mYgiK3JvH063g+K9tHA63Z
eTgKgndlh+WI+zv7i44HepRZjA1FYwYZ9Vv/9UkC5Yz8/yU65fgjaE+wVHM4e/Yy
C2osrPWE7gJ+dXMCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYD
VR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNV
HQ4EFgQUwDFSzVpQw4J8dHHOy+mc+XrrguIwHwYDVR0jBBgwFoAUhBjMhTTsvAyU
lC4IWZzHshBOCggwewYIKwYBBQUHAQEEbzBtMC8GCCsGAQUFBzABhiNodHRwOi8v
b2NzcC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbTA6BggrBgEFBQcwAoYuaHR0cDov
L2NydC5yb290Y2ExLmFtYXpvbnRydXN0LmNvbS9yb290Y2ExLmNlcjA/BgNVHR8E
ODA2MDSgMqAwhi5odHRwOi8vY3JsLnJvb3RjYTEuYW1hem9udHJ1c3QuY29tL3Jv
b3RjYTEuY3JsMBMGA1UdIAQMMAowCAYGZ4EMAQIBMA0GCSqGSIb3DQEBCwUAA4IB
AQAtTi6Fs0Azfi+iwm7jrz+CSxHH+uHl7Law3MQSXVtR8RV53PtR6r/6gNpqlzdo
Zq4FKbADi1v9Bun8RY8D51uedRfjsbeodizeBB8nXmeyD33Ep7VATj4ozcd31YFV
fgRhvTSxNrrTlNpWkUk0m3BMPv8sg381HhA6uEYokE5q9uws/3YkKqRiEz3TsaWm
JqIRZhMbgAfp7O7FUwFIb7UIspogZSKxPIWJpxiPo3TcBambbVtQOcNRWz5qCQdD
slI2yayq0n2TXoHyNCLEH8rpsJRVILFsg0jc7BaFrMnF462+ajSehgj12IidNeRN
4zl+EoNaWdpnWndvSpAEkq2P
-----END CERTIFICATE-----
)literal";

// Optional: Add client certificate and key for mutual TLS if needed
// const char* clientCertKey = "";
// const char* clientCert = "";

// Store request in PROGMEM
const char request[] PROGMEM = "POST /post HTTP/1.1\r\n"
                        "Host: www.httpbin.org\r\n"
                        "Content-Type: application/x-www-form-urlencoded\r\n"
                        "Content-Length: 27\r\n"
                        "Connection: close\r\n"
                        "\r\n"
                        "AvantMaker=Hello from ESP32";

NetworkClientSecure secureClient;

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

    // Connect Wifi
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("Connected to WiFi");

    // set ROOT CA Cert
    secureClient.setCACert(rootCACert);

    // Establish secure connection to server
    if (secureClient.connect(host, port)) {
        Serial.println("Connected to server");

        // Send PROGMEM request data
        size_t bytesWritten = secureClient.write_P(request, strlen_P(request)); 

        Serial.print("Bytes written: ");
        Serial.println(bytesWritten);

        // Wait for and display server response
        delay(1000); // Wait for response
        while (secureClient.available()) {
            Serial.write(secureClient.read());
        }

        // Close connection
        secureClient.stop();
        Serial.println("\nConnection closed");
    } else {
      Serial.println("Connection failed. Check code description for solution.");
    }      
}

void loop() {
}

ESP32 Library Index

ESP32 Arduino Core Library


FAQ

Ready to experiment and explore more about ESP32? Visit our website’s All About ESP32 Resources Hub, packed with tutorials, guides, and tools to inspire your maker journey. Experiment, explore, and elevate your skills with everything you need to master this powerful microcontroller platform!

error: Content is protected !!