Menggunakan cURL untuk GET dan POST ke API di PHP

| | | PHP
Menggunakan cURL untuk GET dan POST ke API di PHP

Melalui fungsi bawaan PHP curl_exec kita bisa memuat data yang tersedia lewat protokol HTTP bahkan bertukar informasi ke protokol FTP. di artikel ini saya pakai cURL untuk request GET dan POST ke REST API, plus cara menyertakan token Bearer yang biasanya wajib buat API yang pakai JWT.

Video : Menggunakan cURL untuk GET dan POST ke API di PHP

Simak video pembahasan cara Menggunakan cURL untuk GET dan POST ke API di PHP berikut ini.

Menggunakan HTTP verb curl di PHP

menggunakan fungsi cURL bawaan PHP biasanya untuk kebutuhan integrasi dengan API external service, contohnya menghubungkan ke sistem pembayaran, mengambil data dari API cuaca, sampai cek ongkir. intinya dengan cURL kita bisa “browsing” dari dalam kode, bahkan bisa juga untuk mengumpulkan data alias scraping.

Menggunakan HTTP GET

request GET dipakai untuk mengambil data. berikut contoh memanggil endpoint GET yang mengembalikan JSON:

$authorId = "12345";
$url = "https://reqres.in/api/users/{$authorId}";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$authorJSON = json_decode($response, true);

Penjelasan :

  • $ch = curl_init(); : melakukan inisialisasi curl
  • curl_setopt($ch, CURLOPT_URL, $url); : mengatur URL tujuan request
  • curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); : penting! tanpa ini curl_exec langsung mencetak respons ke layar, bukan mengembalikannya ke variabel. dengan true, hasilnya ditampung ke $response
  • $response = curl_exec($ch); : menjalankan request sampai dapat respons, hasilnya ditampung ke $response
  • curl_getinfo($ch, CURLINFO_HTTP_CODE); : mengambil kode status HTTP (200, 404, 500, dst) untuk cek apakah request sukses
  • curl_close($ch); : menutup curl
  • json_decode($response, true); : mengubah JSON jadi array PHP supaya mudah diolah. parameter kedua true membuat hasilnya array assoc, bukan object

Menggunakan HTTP POST dengan JSON

untuk mengirim data, misalnya login atau menambah data baru, pakai POST. body-nya biasanya JSON:

$url = "https://reqres.in/api/login";

$data = [
    'email'    => '[email protected]',
    'password' => 'cityslicka'
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Accept: application/json'
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$result = json_decode($response, true);

Penjelasan :

  • curl_setopt($ch, CURLOPT_POST, true); : mengubah method jadi POST
  • curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); : isi body request. karena API-nya berformat JSON, datanya di-encode dulu dengan json_encode()
  • curl_setopt($ch, CURLOPT_HTTPHEADER, [...]); : menambahkan header, di sini memberitahu server bahwa body berupa JSON

Menambahkan header Authorization Bearer

kebanyakan API yang pakai JWT mengharuskan header Authorization: Bearer <token>. cara menambahkannya tinggal gabung ke CURLOPT_HTTPHEADER:

$token = "TOKEN_JWT_ANDA";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . $token,
    'Accept: application/json'
]);

$response = curl_exec($ch);
curl_close($ch);

Menangani error

kalau curl_exec mengembalikan false, berarti terjadi kegagalan di level koneksi (bukan error HTTP). untuk tahu penyebabnya, pakai curl_error():

$response = curl_exec($ch);

if ($response === false) {
    echo 'cURL error: ' . curl_error($ch);
} else {
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    echo 'HTTP status: ' . $httpCode;
}

curl_close($ch);

perlu diingat, error HTTP 4xx/5xx tetap menghasilkan respons string (bukan false), jadi cek CURLINFO_HTTP_CODE dulu untuk memastikan responsnya memang sukses sebelum diolah.

untuk penjelasan lebih dalam soal method GET dan POST di API, baca juga Perbedaan PATCH dan PUT dan HTTP method lainnya di API HTTP.

Pertanyaan yang Sering Diajukan

Apa itu cURL di PHP?

cURL adalah library bawaan PHP untuk melakukan request HTTP lewat kode. Fungsinya mirip browsing, tapi dilakukan dari dalam program, misalnya mengambil data dari REST API, cek status pembayaran, atau integrasi sistem lain.

Bagaimana cara kirim POST JSON pakai cURL PHP?

Set CURLOPT_POST jadi true, CURLOPT_POSTFIELDS diisi string JSON hasil json_encode(), dan set header Content-Type: application/json lewat CURLOPT_HTTPHEADER.

Cara menambahkan header Authorization Bearer token di cURL PHP?

Tambahkan pada CURLOPT_HTTPHEADER, misalnya array("Authorization: Bearer TOKEN_ANDA", "Accept: application/json"). Biasanya dibutuhkan untuk API yang pakai JWT.

Kenapa cURL mengembalikan false atau respons kosong?

Biasanya karena SSL error, URL tidak valid, atau timeout. Gunakan curl_error($ch) untuk melihat pesan errornya, dan curl_errno($ch) untuk kode errornya saat proses debugging.

Tutorial Video

Sigit Nurhanafi avatar
Full-stack developer & technical writer. Berpengalaman di PHP, Laravel, NodeJS, MySQL, dan Python. Aktif menulis tutorial pemrograman dan maintaining open-source projects di PemburuKode sejak 2021.