Blog Archive

Arduino Indonesia. Gambar tema oleh Storman. Diberdayakan oleh Blogger.

Supported by Electronics 3 in 1

1. Jasa pencetakan PCB single layer dengan harga paling murah.

(Metode Pembuatan dengan Transfer Toner)
>PCB design sendiri (siap cetak) : Rp.150,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

(Metode Sablon Full Masking dan Silk Screen minimal pemesanan 100 Pcs)
>PCB design sendiri (siap cetak) : Rp.200,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

2. Jasa perancangan, perakitan, dan pembuatan trainer pembelajaran elektronika untuk SMK dan Mahasiswa.

3. Jasa perancangan, perakitan, dan pembuatan berbagai macam kontroller, sensor, aktuator, dan tranduser.
>Design Rangkaian / Sistem Elektronika
>Design Rangkaian / Sistem Instrumentasi
>Design Rangkaian / Sistem Kendali
>Kerjasama Riset (data atau peralatan)
>Kerjasama Produksi Produk-Produk KIT Elektronika
>Produksi Instrumentasi Elektronika

4. Jasa Pembuatan Proyek, Tugas Akhir, Tugas Laboratorium, PKM, Karya Ilmiah, SKRIPSI, dll

Like My Facebook

Popular Posts

Selasa, 14 Juli 2026

ESP32 HTTP Request - Panduan Lengkap Mengirim HTTP GET dan POST ke Web Server

ESP32 merupakan salah satu mikrokontroler yang telah dilengkapi dengan WiFi, sehingga mampu berkomunikasi secara langsung dengan berbagai layanan berbasis internet. Salah satu bentuk komunikasi yang paling sering digunakan adalah HTTP Request, yaitu mekanisme untuk mengirim permintaan (request) ke sebuah web server, REST API, atau web service. Teknik ini banyak dimanfaatkan pada proyek Internet of Things (IoT), seperti mengirim data sensor ke database, mengambil informasi dari server, hingga mengendalikan perangkat melalui aplikasi web.

 

Pada tutorial ini Anda akan mempelajari cara menggunakan ESP32 untuk membuat HTTP Request menggunakan metode GET maupun POST. Selain itu, Anda juga akan belajar bagaimana cara mengirim data, seperti suhu dan kelembapan dari sensor, ke sebuah web server menggunakan parameter HTTP. Seluruh pembahasan disusun secara bertahap agar mudah dipahami, baik oleh pemula maupun pengguna yang sudah mengenal dasar pemrograman ESP32.

Apa itu HTTP Request?

HTTP Request adalah proses ketika sebuah perangkat, seperti ESP32, mengirimkan permintaan kepada sebuah web server menggunakan protokol HTTP (HyperText Transfer Protocol). Setelah menerima permintaan tersebut, server akan memprosesnya, kemudian mengirimkan HTTP Response sebagai balasan. Respons dari server dapat berupa:

- Halaman web (HTML)

- Data dalam format JSON

- File XML

- Gambar

- Status keberhasilan atau kegagalan permintaan

- Data lain sesuai dengan layanan yang digunakan 

Pada proyek IoT, HTTP Request biasanya digunakan untuk mengirim data sensor ke server atau database, mengambil data dari web server, berkomunikasi dengan REST API, mengontrol perangkat melalui aplikasi berbasis web, dan mengakses layanan cloud, seperti dashboard monitoring atau sistem otomatisasi. Secara sederhana, alur komunikasi HTTP dapat digambarkan sebagai berikut:

ESP32 → HTTP Request → Web Server → HTTP Response → ESP32

Metode HTTP yang Digunakan ESP32

HTTP memiliki beberapa metode komunikasi, namun dua metode yang paling sering digunakan pada proyek ESP32 adalah HTTP GET dan HTTP POST.

1. HTTP GET

Metode GET digunakan untuk meminta atau mengambil data dari server. Selain itu, GET juga dapat mengirim data melalui URL menggunakan query string.

Contoh URL:

 

http://example.com/data?temperature=26&humidity=70


Pada contoh di atas, data yang dikirim adalah:

- temperature = 26

- humidity = 70 

Karena parameter dikirim melalui URL, panjang data yang dapat dikirim relatif terbatas. Oleh karena itu, metode GET lebih cocok digunakan untuk mengambil data dari server, mengirim parameter sederhana, dan mengakses REST API yang hanya membutuhkan beberapa parameter.

2. HTTP POST

Berbeda dengan GET, metode POST mengirim data melalui body (isi) dari HTTP Request, sehingga data tidak ditampilkan pada URL. Metode ini lebih fleksibel karena dapat mengirim berbagai jenis data, misalnya:

- Form URL Encoded

- JSON

- XML

- File

Gambar

- Audio

- Video  

Pada proyek IoT, metode POST umumnya digunakan ketika ESP32 mengirim data sensor secara berkala, informasi perangkat, file hasil pembacaan kamera, dan data dalam format JSON. Karena data dikirim melalui body request, metode POST mampu menangani ukuran data yang jauh lebih besar dibandingkan GET.

Perbedaan HTTP GET dan HTTP POST

HTTP GET merupakan metode HTTP yang digunakan untuk mengambil data dari server. Pada metode ini, data dikirim melalui URL dalam bentuk query string, sehingga parameter yang dikirim akan terlihat pada alamat URL. Karena menggunakan URL, ukuran data yang dapat dikirim relatif terbatas. Oleh karena itu, metode HTTP GET lebih cocok digunakan untuk membaca data, melakukan pencarian, atau mengambil informasi dari server.

 

Sedangkan HTTP POST merupakan metode HTTP yang digunakan untuk mengirim data ke server. Data dikirim melalui body HTTP Request, sehingga parameter tidak ditampilkan pada URL. Metode ini memungkinkan pengiriman data dengan ukuran yang lebih besar dibandingkan HTTP GET, sehingga lebih sesuai digunakan untuk menyimpan data sensor, mengirim formulir, maupun melakukan upload file.

Perangkat Keras yang Dibutuhkan

Sebelum mulai membuat HTTP Request menggunakan ESP32, siapkan beberapa perangkat berikut:

- ESP32 Dev Module ESP-WROOM-32 (38 Pin)

- Kabel USB untuk menghubungkan ESP32 ke komputer.

- Jaringan WiFi yang memiliki akses internet.

- Arduino IDE yang telah dikonfigurasi untuk pemrograman ESP32. 

Library yang Digunakan

Untuk membuat HTTP Request, ESP32 membutuhkan dua library utama.

 

#include <WiFi.h>

#include <HTTPClient.h>


Penjelasan masing-masing library:

- WiFi.h digunakan untuk menghubungkan ESP32 ke jaringan WiFi.

- HTTPClient.h menyediakan berbagai fungsi untuk membuat komunikasi HTTP, seperti GET, POST, membaca respons server, hingga menangani error komunikasi.

Langkah-langkah Membuat HTTP Request pada ESP32

Secara umum, proses pembuatan HTTP Request terdiri dari beberapa tahapan berikut:

1. Menentukan SSID dan Password WiFi

Langkah pertama adalah menentukan jaringan WiFi yang akan digunakan oleh ESP32.

 

const char WIFI_SSID[] = "YOUR_WIFI_SSID";

const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";


Gantilah nilai berikut sesuai jaringan WiFi Anda:

- YOUR_WIFI_SSID → nama jaringan WiFi.

YOUR_WIFI_PASSWORD → kata sandi WiFi.

Contoh:

 

const char WIFI_SSID[] = "RumahSaya";

const char WIFI_PASSWORD[] = "12345678";


Saat program dijalankan, ESP32 akan mencoba terhubung ke jaringan tersebut sebelum mengirim HTTP Request.

2. Menentukan Alamat Tujuan HTTP Request

Selanjutnya tentukan alamat server yang akan menerima permintaan dari ESP32.

 

String HOST_NAME = "http://YOUR_DOMAIN.com";

String PATH_NAME = "/products/arduino";

//String PATH_NAME = "/products/arduino.php";


Ketiga variabel di atas memiliki fungsi berbeda.

- HOST_NAME

Berisi nama domain atau alamat IP server tujuan.

Contoh:

 

String HOST_NAME = "http://192.168.1.5";


atau

 

String HOST_NAME = "http://example.com";

 

- PATH_NAME

Menunjukkan lokasi halaman, endpoint API, atau file PHP yang akan diakses.

Contoh:

 

String PATH_NAME = "/sensor/read";


atau

 

String PATH_NAME = "/upload.php";

 

Catatan: Pada artikel asli terdapat deklarasi variabel HOST_NAME yang ditulis dua kali. Hal tersebut merupakan kesalahan penulisan. Pastikan setiap variabel hanya dideklarasikan satu kali agar program dapat dikompilasi tanpa error.

3. Membuat Objek HTTPClient

Setelah alamat server ditentukan, buat objek HTTP menggunakan library HTTPClient.

 

HTTPClient http;


Objek http akan digunakan untuk membuka koneksi, mengirim permintaan, membaca respons server, dan menutup koneksi setelah proses selesai.

4. Mengirim HTTP GET Request

Untuk mengirim permintaan HTTP GET, gunakan fungsi berikut:

 

http.begin(HOST_NAME + PATH_NAME);


int httpCode = http.GET();


Baris pertama membuka koneksi menuju alamat server yang telah ditentukan.

Sedangkan baris kedua mengirimkan HTTP GET Request dan menyimpan HTTP Status Code yang dikembalikan server ke dalam variabel httpCode.

Jika permintaan berhasil, biasanya server akan mengembalikan kode 200 (OK).

5. Membaca Respons dari Web Server

Setelah server memproses permintaan, ESP32 dapat membaca respons yang dikirimkan menggunakan kode berikut:

 

if (httpCode > 0) {


  if (httpCode == HTTP_CODE_OK) {


    String payload = http.getString();


    Serial.println(payload);


  } else {


    Serial.printf("[HTTP] GET... code: %d\n", httpCode);


  }


} else {


  Serial.printf("[HTTP] GET... failed, error: %s\n",

                http.errorToString(httpCode).c_str());


}


Penjelasan program:

- httpCode > 0 menunjukkan bahwa ESP32 berhasil berkomunikasi dengan server.

- HTTP_CODE_OK bernilai 200, yang berarti permintaan berhasil diproses.

- http.getString() digunakan untuk membaca isi respons dari server.

- Jika terjadi kesalahan, fungsi http.errorToString() akan menampilkan penyebab error sehingga proses debugging menjadi lebih mudah. 

6. Menutup Koneksi HTTP

Setelah proses komunikasi selesai, koneksi HTTP sebaiknya ditutup menggunakan fungsi berikut:

 

http.end();


Langkah ini bertujuan untuk membebaskan memori serta menutup koneksi yang masih aktif sehingga ESP32 dapat membuat koneksi HTTP berikutnya dengan lebih stabil.

Program Lengkap ESP32 untuk Membuat HTTP GET Request

Berikut adalah contoh program lengkap untuk membuat HTTP GET Request menggunakan ESP32.


#include <WiFi.h>

#include <HTTPClient.h>


const char WIFI_SSID[] = "YOUR_WIFI_SSID";         // CHANGE IT

const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE IT


String HOST_NAME = "http://YOUR_DOMAIN.com"; // CHANGE IT

String PATH_NAME = "/products/arduino";      // CHANGE IT

//String PATH_NAME = "/products/arduino.php"; // CHANGE IT


void setup() {

  Serial.begin(9600);


  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);


  Serial.println("Connecting");


  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(".");

  }


  Serial.println();

  Serial.print("Connected to WiFi network with IP Address: ");

  Serial.println(WiFi.localIP());


  HTTPClient http;


  http.begin(HOST_NAME + PATH_NAME);


  int httpCode = http.GET();


  if (httpCode > 0) {


    if (httpCode == HTTP_CODE_OK) {


      String payload = http.getString();


      Serial.println(payload);


    } else {


      Serial.printf("[HTTP] GET... code: %d\n", httpCode);


    }


  } else {


    Serial.printf("[HTTP] GET... failed, error: %s\n",

                  http.errorToString(httpCode).c_str());


  }


  http.end();

}


void loop() {


}

 

Penjelasan Program

Program di atas melakukan beberapa langkah utama secara berurutan.

- ESP32 menghubungkan diri ke jaringan WiFi menggunakan SSID dan password yang telah ditentukan.

- Setelah berhasil terhubung, ESP32 membuat objek HTTPClient.

- ESP32 membuka koneksi menuju alamat server menggunakan fungsi http.begin().

- Selanjutnya ESP32 mengirim HTTP GET Request melalui fungsi http.GET().

- Jika server memberikan respons dengan status 200 OK, maka isi respons akan dibaca menggunakan http.getString() dan ditampilkan pada Serial Monitor.

- Setelah seluruh proses selesai, koneksi HTTP ditutup menggunakan http.end(). 

Dengan memahami alur dasar ini, Anda telah mengetahui bagaimana ESP32 berkomunikasi dengan sebuah web server melalui protokol HTTP. Pada bagian berikutnya, kita akan mempelajari cara mengirim data, seperti nilai suhu dan kelembapan dari sensor, menggunakan HTTP GET melalui query string, sekaligus membahas setiap bagian kode secara lebih mendalam.

Mengirim Data ke Web Server Menggunakan HTTP Request

Pada contoh sebelumnya, ESP32 hanya mengirim HTTP GET Request untuk mengakses sebuah halaman atau endpoint pada web server. Namun, dalam sebagian besar proyek Internet of Things (IoT), tujuan utama HTTP Request bukan hanya mengambil data, melainkan juga mengirimkan informasi dari sensor ke server. Sebagai contoh, ESP32 dapat mengirimkan berbagai jenis data, seperti:

- Nilai suhu dari sensor DHT11 atau DHT22.

- Kelembapan udara.

- Intensitas cahaya.

Status relay atau LED.

- Nilai pembacaan sensor hujan.

- Data GPS.

- Informasi perangkat (Device ID, waktu, atau alamat IP).   

Data tersebut nantinya dapat diproses oleh aplikasi web, disimpan ke database, atau ditampilkan pada dashboard monitoring secara real-time.

Bagaimana Cara ESP32 Mengirim Data?

Secara umum, terdapat dua metode yang paling sering digunakan untuk mengirim data melalui HTTP, yaitu HTTP GET dan HTTP POST. Perbedaan utama keduanya terletak pada lokasi penyimpanan data di dalam HTTP Request.

1. HTTP GET

Pada metode GET, data dikirim melalui URL dalam bentuk query string.

Contohnya:

 

http://example.com/sensor?temperature=26&humidity=70

 

Bagian setelah tanda ? disebut query string.

Pada contoh di atas:

- temperature merupakan nama parameter.

- 26 merupakan nilai parameter.

- humidity merupakan parameter kedua.

70 merupakan nilai parameter kedua.

Server akan membaca setiap parameter tersebut, kemudian memprosesnya sesuai program yang dibuat.

2. HTTP POST

Berbeda dengan GET, metode POST mengirim data melalui body (isi) dari HTTP Request. Sebagai ilustrasi:

 

POST /sensor HTTP/1.1


temperature=26&humidity=70


Karena data tidak berada di URL, metode POST lebih cocok digunakan untuk mengirim data berukuran besar atau data yang bersifat sensitif.

Mengenal Query String

Sebelum menggunakan HTTP GET maupun HTTP POST, Anda perlu memahami apa yang dimaksud dengan query string. Query string adalah sekumpulan parameter yang dikirim ke server dalam format:

 

parameter1=nilai1&parameter2=nilai2


Setiap pasangan parameter terdiri atas:

 

nama_parameter = nilai_parameter


Sedangkan beberapa parameter dipisahkan menggunakan karakter &.

Contoh:

 

temperature=28&humidity=68&pressure=1008


Artinya server akan menerima tiga data sekaligus, yaitu:

- temperature = 28

- humidity = 68

- pressure = 1008

Format ini merupakan format yang paling umum digunakan dalam komunikasi HTTP berbasis application/x-www-form-urlencoded.

Membuat Query String di ESP32

Biasanya nilai yang dikirim berasal dari sensor. Sebagai contoh:

 

int temp = 26;

int humi = 70;


Agar kedua data tersebut dapat dikirim melalui HTTP, keduanya harus digabung menjadi sebuah query string.

 

String queryString =

String("temperature=") +

String(temp) +

String("&humidity=") +

String(humi);


Jika nilai variabel adalah:

temp = 26

humi = 70

Maka isi variabel queryString menjadi:

temperature=26&humidity=70

Selanjutnya string tersebut dapat dikirim menggunakan metode GET maupun POST.

Mengirim Data Menggunakan HTTP GET

Pada metode GET, query string ditambahkan ke bagian akhir URL. Sintaksnya adalah:

 

http.begin(HOST_NAME + PATH_NAME + "?" + queryString);


Misalnya:

 

HOST_NAME = "http://example.com"

PATH_NAME = "/sensor"

queryString = "temperature=26&humidity=70"


Maka URL yang dikirim ESP32 menjadi:

 

http://example.com/sensor?temperature=26&humidity=70


Server kemudian akan membaca nilai parameter tersebut.

Setelah koneksi dibuat, kirim permintaan menggunakan fungsi berikut:

 

http.addHeader("Content-Type", "application/x-www-form-urlencoded");


int httpCode = http.GET();

 

Mengapa Menggunakan Content-Type?

Pada contoh di atas terdapat baris:

 

http.addHeader("Content-Type", "application/x-www-form-urlencoded");


Baris tersebut berfungsi memberi tahu server mengenai format data yang dikirim oleh ESP32. Pada tutorial ini digunakan format:

 

application/x-www-form-urlencoded


Format tersebut merupakan standar yang paling banyak digunakan ketika data dikirim dalam bentuk:

 

temperature=26&humidity=70


Meskipun pada beberapa server header ini tidak wajib saat menggunakan metode GET, menambahkannya merupakan kebiasaan yang baik karena membuat format komunikasi menjadi lebih jelas.

Membaca Respons dari Server

Setelah permintaan berhasil dikirim, langkah berikutnya adalah membaca respons dari server. Gunakan kode berikut:

 

if (httpCode > 0) {


  if (httpCode == HTTP_CODE_OK) {


    String payload = http.getString();


    Serial.println(payload);


  } else {


    Serial.printf("[HTTP] GET... code: %d\n", httpCode);


  }


} else {


  Serial.printf("[HTTP] GET... failed, error: %s\n",

                http.errorToString(httpCode).c_str());


}


http.end();


Penjelasan kode:

- httpCode > 0 menunjukkan bahwa ESP32 berhasil melakukan komunikasi dengan server.

- HTTP_CODE_OK menunjukkan server mengembalikan status 200 OK.

- http.getString() membaca isi respons yang dikirim oleh server.

- Jika terjadi kesalahan komunikasi, fungsi http.errorToString() akan menampilkan penyebab error pada Serial Monitor.

- http.end() digunakan untuk menutup koneksi HTTP setelah proses selesai.  

Program Lengkap HTTP GET dengan Mengirim Data

Berikut contoh program lengkap ESP32 untuk mengirim data menggunakan HTTP GET.


#include <WiFi.h>

#include <HTTPClient.h>


const char WIFI_SSID[] = "YOUR_WIFI_SSID";         // CHANGE IT

const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE IT


String HOST_NAME = "http://YOUR_DOMAIN.com"; // CHANGE IT

String PATH_NAME = "/products/arduino";      // CHANGE IT

//String PATH_NAME = "/products/arduino.php"; // CHANGE IT


String queryString = "temperature=26&humidity=70";


void setup() {

  Serial.begin(9600);


  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);


  Serial.println("Connecting");


  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(".");

  }


  Serial.println();

  Serial.print("Connected to WiFi network with IP Address: ");

  Serial.println(WiFi.localIP());


  HTTPClient http;


  http.begin(HOST_NAME + PATH_NAME + "?" + queryString);


  http.addHeader("Content-Type", "application/x-www-form-urlencoded");


  int httpCode = http.GET();


  if (httpCode > 0) {


    if (httpCode == HTTP_CODE_OK) {


      String payload = http.getString();


      Serial.println(payload);


    } else {


      Serial.printf("[HTTP] GET... code: %d\n", httpCode);


    }


  } else {


    Serial.printf("[HTTP] GET... failed, error: %s\n",

                  http.errorToString(httpCode).c_str());


  }


  http.end();

}


void loop() {


}

 

Penjelasan Program

Mari kita pahami alur kerja program di atas secara bertahap.

1. ESP32 Terhubung ke WiFi

Program terlebih dahulu menghubungkan ESP32 ke jaringan WiFi menggunakan SSID dan password yang telah ditentukan.

 

WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

 

ESP32 akan terus mencoba terhubung hingga memperoleh koneksi internet.

2. Membuat Query String

Data yang akan dikirim telah disimpan pada variabel:

 

String queryString = "temperature=26&humidity=70";

 

Pada proyek nyata, nilai tersebut biasanya berasal dari sensor.

Contohnya:

 

float temperature = dht.readTemperature();

float humidity = dht.readHumidity();

String queryString =

"temperature=" + String(temperature) +

"&humidity=" + String(humidity);

 

Dengan cara ini, data sensor yang dikirim selalu mengikuti hasil pembacaan terbaru.

3. Membuka Koneksi HTTP

Selanjutnya ESP32 membuka koneksi ke server.

 

http.begin(HOST_NAME + PATH_NAME + "?" + queryString);

 

Jika:

 

HOST_NAME = http://example.com

PATH_NAME = /sensor

 

Maka URL yang dikirim menjadi:

 

http://example.com/sensor?temperature=26&humidity=70

 

4. Mengirim HTTP GET

Setelah koneksi berhasil dibuat, ESP32 mengirim permintaan menggunakan:

 

int httpCode = http.GET();


Server kemudian menerima URL beserta parameter yang telah dikirim.

5. Membaca Respons

Jika server berhasil memproses permintaan tersebut, ESP32 akan membaca balasan menggunakan:

 

String payload = http.getString();


Sebagai contoh, server dapat mengirimkan respons berikut:

 

Data berhasil disimpan


atau

 

{

  "status":"success"

}


Isi respons tersebut kemudian ditampilkan melalui Serial Monitor.

6. Menutup Koneksi

Langkah terakhir adalah menutup koneksi HTTP.

 

http.end();


Meskipun terlihat sederhana, langkah ini sangat penting karena dapat membebaskan resource yang digunakan selama komunikasi berlangsung. Jika koneksi tidak ditutup, penggunaan memori dapat meningkat dan menyebabkan program menjadi kurang stabil, terutama ketika ESP32 melakukan HTTP Request secara berulang dalam fungsi loop().

Kapan Sebaiknya Menggunakan HTTP GET?

Metode HTTP GET sangat cocok digunakan apabila Anda hanya perlu mengirim data berukuran kecil atau mengambil informasi dari server. Beberapa contoh penggunaannya antara lain:

- Mengirim nilai suhu dan kelembapan dari sensor.

- Mengambil status LED atau relay dari web server.

- Membaca konfigurasi perangkat dari REST API.

- Mengambil data cuaca dari layanan web.

- Mengirim parameter sederhana untuk proses monitoring.  

Namun, apabila data yang dikirim semakin besar, memiliki banyak parameter, atau berupa file seperti gambar dari ESP32-CAM, maka metode HTTP POST merupakan pilihan yang lebih tepat. Pada bagian selanjutnya, kita akan mempelajari cara menggunakan HTTP POST untuk mengirim data ke web server, sekaligus memahami perbedaannya dengan HTTP GET secara lebih mendalam.

Mengirim Data ke Web Server Menggunakan HTTP POST

Pada bagian sebelumnya, Anda telah mempelajari cara mengirim data menggunakan HTTP GET, yaitu dengan menambahkan parameter ke dalam URL melalui query string. Cara tersebut sangat sederhana dan cocok digunakan untuk mengirim data berukuran kecil. Namun, dalam pengembangan aplikasi Internet of Things (IoT), terdapat banyak kondisi di mana data yang dikirim jauh lebih kompleks, misalnya:

  • Data sensor dalam jumlah banyak.

  • Data dalam format JSON.

  • File gambar dari ESP32-CAM.

  • File log atau konfigurasi perangkat.

  • Data autentikasi pengguna.

Untuk kebutuhan tersebut, metode HTTP POST menjadi pilihan yang lebih tepat karena data dikirim melalui body (isi) dari HTTP Request, bukan melalui URL.

Bagaimana Cara Kerja HTTP POST?

Pada metode HTTP POST, URL hanya berfungsi sebagai alamat tujuan, sedangkan data yang akan dikirim ditempatkan di dalam body dari permintaan HTTP. Sebagai contoh, jika menggunakan HTTP GET, URL yang dikirim adalah:

 

http://example.com/sensor?temperature=26&humidity=70


Sedangkan pada HTTP POST, URL hanya berisi alamat tujuan:

 

http://example.com/sensor


Sementara data dikirim secara terpisah di dalam body:

 

temperature=26&humidity=70


Dengan cara ini, URL menjadi lebih bersih dan jumlah data yang dapat dikirim pun jauh lebih besar dibandingkan metode GET.

Keuntungan Menggunakan HTTP POST

Dibandingkan metode GET, HTTP POST memiliki beberapa kelebihan, antara lain:

- Mampu mengirim data dalam jumlah yang lebih besar.

- Data tidak ditampilkan pada URL, sehingga alamat URL tetap ringkas.

Mendukung berbagai format data, seperti:

application/x-www-form-urlencoded

JSON

- XML

- Plain Text

File

Gambar

- Audio maupun Video   

- Sangat cocok digunakan untuk proses insert, upload, atau penyimpanan data ke server. 

Meskipun data POST tidak terlihat pada URL, perlu diketahui bahwa data tersebut tidak otomatis terenkripsi. Jika komunikasi dilakukan menggunakan protokol HTTP, data tetap dapat disadap oleh pihak lain. Oleh karena itu, untuk aplikasi yang membutuhkan keamanan lebih tinggi, sebaiknya gunakan protokol HTTPS agar seluruh komunikasi dienkripsi menggunakan SSL/TLS.

Menyiapkan Data yang Akan Dikirim

Sebelum mengirim data menggunakan HTTP POST, buat terlebih dahulu data yang akan dikirim.

Misalnya:

 

String queryString = "temperature=26&humidity=70";


Pada aplikasi nyata, data biasanya berasal dari sensor.

Contohnya:

 

float temperature = dht.readTemperature();

float humidity = dht.readHumidity();


String queryString =

"temperature=" + String(temperature) +

"&humidity=" + String(humidity);


Dengan demikian, nilai yang dikirim ke server selalu mengikuti hasil pembacaan sensor terbaru.

Membuat HTTP POST Request

Langkah pertama adalah membuka koneksi menuju server.

 

http.begin(HOST_NAME + PATH_NAME);


Berbeda dengan metode GET, query string tidak ditambahkan ke URL.

Selanjutnya tentukan format data yang dikirim.

 

http.addHeader("Content-Type", "application/x-www-form-urlencoded");


Kemudian kirim data menggunakan fungsi berikut.

 

int httpCode = http.POST(queryString);


Fungsi POST() akan mengirim seluruh isi variabel queryString ke body HTTP Request.

Mengapa Harus Menentukan Content-Type?

Server perlu mengetahui format data yang diterima agar dapat memprosesnya dengan benar. Oleh karena itu, sebelum mengirim data, kita perlu menambahkan HTTP Header menggunakan fungsi berikut:

 

http.addHeader("Content-Type", "application/x-www-form-urlencoded");


Nilai Content-Type yang digunakan harus sesuai dengan format data yang dikirim. Berikut beberapa jenis Content-Type yang sering digunakan.

- application/x-www-form-urlencoded: Digunakan untuk mengirim data dalam bentuk pasangan parameter dan nilai (key=value).

- application/json: Digunakan untuk mengirim data dalam format JSON yang umum digunakan pada REST API.

- text/plain: Digunakan untuk mengirim data berupa teks biasa tanpa format khusus.

- application/xml: Digunakan untuk mengirim data dalam format XML.

- multipart/form-data: Digunakan untuk mengirim file, seperti gambar, dokumen, atau data formulir yang berisi file.

Pada tutorial ini digunakan application/x-www-form-urlencoded karena data dikirim dalam bentuk:

 

temperature=26&humidity=70

 

Membaca Respons dari Server

Setelah data berhasil dikirim, server akan memberikan respons kepada ESP32. Gunakan kode berikut untuk membaca respons tersebut.

 

if (httpCode > 0) {


  if (httpCode == HTTP_CODE_OK) {


    String payload = http.getString();


    Serial.println(payload);


  } else {


    Serial.printf("[HTTP] POST... code: %d\n", httpCode);


  }


} else {


  Serial.printf("[HTTP] POST... failed, error: %s\n",

                http.errorToString(httpCode).c_str());


}


http.end();

Penjelasan:

- httpCode > 0 menunjukkan bahwa komunikasi dengan server berhasil dilakukan.

- HTTP_CODE_OK berarti server mengembalikan status 200 OK.

- http.getString() digunakan untuk membaca isi respons dari server.

Jika terjadi kegagalan komunikasi, fungsi http.errorToString() akan menampilkan penyebab error pada Serial Monitor.

- http.end() digunakan untuk menutup koneksi setelah proses selesai.  

Program Lengkap ESP32 HTTP POST dengan Mengirim Data

Berikut contoh program lengkap untuk mengirim data menggunakan metode HTTP POST.


#include <WiFi.h>

#include <HTTPClient.h>


const char WIFI_SSID[] = "YOUR_WIFI_SSID";         // CHANGE IT

const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE IT


String HOST_NAME = "http://YOUR_DOMAIN.com"; // CHANGE IT

String PATH_NAME = "/products/arduino";      // CHANGE IT

//String PATH_NAME = "/products/arduino.php"; // CHANGE IT


String queryString = "temperature=26&humidity=70";


void setup() {

  Serial.begin(9600);


  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);


  Serial.println("Connecting");


  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(".");

  }


  Serial.println();

  Serial.print("Connected to WiFi network with IP Address: ");

  Serial.println(WiFi.localIP());


  HTTPClient http;


  http.begin(HOST_NAME + PATH_NAME);


  http.addHeader("Content-Type", "application/x-www-form-urlencoded");


  int httpCode = http.POST(queryString);


  if (httpCode > 0) {


    if (httpCode == HTTP_CODE_OK) {


      String payload = http.getString();


      Serial.println(payload);


    } else {


      Serial.printf("[HTTP] POST... code: %d\n", httpCode);


    }


  } else {


    Serial.printf("[HTTP] POST... failed, error: %s\n",

                  http.errorToString(httpCode).c_str());


  }


  http.end();

}


void loop() {


}

 

Penjelasan Program

Program di atas memiliki alur kerja sebagai berikut.

1. ESP32 Terhubung ke WiFi

ESP32 terlebih dahulu menghubungkan diri ke jaringan WiFi.

 

WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

 

Program akan menunggu hingga koneksi berhasil sebelum melanjutkan proses berikutnya.

2. Membuat Data yang Akan Dikirim

Nilai yang akan dikirim disimpan pada variabel:

 

String queryString = "temperature=26&humidity=70";

 

Pada implementasi sebenarnya, isi variabel tersebut biasanya berasal dari hasil pembacaan sensor.

3. Membuka Koneksi HTTP

ESP32 membuka koneksi menuju server menggunakan alamat yang telah ditentukan.

 

http.begin(HOST_NAME + PATH_NAME);

 

Berbeda dengan metode GET, URL tidak berisi parameter apa pun.

4. Menentukan Format Data

Selanjutnya ditambahkan informasi mengenai format data yang dikirim.

 

http.addHeader("Content-Type", "application/x-www-form-urlencoded");

 

Header ini membantu server memahami bagaimana data harus diproses.

5. Mengirim Data ke Server

Proses pengiriman dilakukan menggunakan fungsi:

 

int httpCode = http.POST(queryString);


Isi variabel queryString akan ditempatkan pada body HTTP Request dan dikirim ke server.

6. Membaca Respons Server

Jika server berhasil menerima dan memproses data, ESP32 akan membaca respons menggunakan:

 

String payload = http.getString();


Sebagai contoh, server dapat mengirimkan respons seperti:

 

Data berhasil disimpan


atau dalam format JSON:

 

{

  "status":"success",

  "message":"Data berhasil diterima"

}

 

7. Menutup Koneksi

Setelah proses selesai, koneksi HTTP ditutup menggunakan:

 

http.end();


Menutup koneksi merupakan langkah penting agar memori yang digunakan oleh library HTTP dapat dibebaskan sebelum melakukan komunikasi berikutnya.

Memahami HTTP Status Code

Setiap kali ESP32 mengirim HTTP Request, server akan mengembalikan HTTP Status Code sebagai informasi apakah permintaan berhasil diproses atau tidak. Berikut beberapa status kode yang paling sering ditemui:

- 200 OK: Menunjukkan bahwa permintaan berhasil diproses oleh server.

- 201 Created: Menunjukkan bahwa data berhasil dibuat atau disimpan di server.

- 400 Bad Request: Menunjukkan bahwa format permintaan tidak sesuai atau terdapat parameter yang salah.

- 401 Unauthorized: Menunjukkan bahwa permintaan memerlukan autentikasi atau pengguna harus login terlebih dahulu.

- 403 Forbidden: Menunjukkan bahwa server menolak permintaan meskipun alamat atau endpoint yang dituju sudah benar.

- 404 Not Found: Menunjukkan bahwa halaman atau endpoint yang diminta tidak ditemukan di server.

- 500 Internal Server Error: Menunjukkan bahwa terjadi kesalahan pada sisi server saat memproses permintaan.

Memahami arti status kode ini akan sangat membantu ketika melakukan proses debugging aplikasi IoT.

Tips Troubleshooting HTTP Request pada ESP32

Jika HTTP Request tidak berjalan sebagaimana mestinya, lakukan beberapa pemeriksaan berikut:

- Pastikan SSID dan password WiFi sudah benar.

- Periksa apakah alamat HOST_NAME dan PATH_NAME sudah sesuai.

- Pastikan web server atau REST API dapat diakses melalui browser.

- Pastikan ESP32 dan server berada pada jaringan yang benar apabila menggunakan alamat IP lokal.

- Gunakan Serial Monitor untuk melihat nilai httpCode dan pesan error yang ditampilkan oleh http.errorToString().

- Pastikan server mendukung metode HTTP yang digunakan, baik GET maupun POST.

Periksa apakah Content-Type yang dikirim sesuai dengan format data yang diharapkan oleh server.

 

Baca juga: ESP32 dengan MySQL - Cara Menghubungkan ESP32 ke Database MySQL melalui HTTP/HTTPS

 

 

 

Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.  

0 on: "ESP32 HTTP Request - Panduan Lengkap Mengirim HTTP GET dan POST ke Web Server"