Cara menggunakan php simple curl

Assalamualaikum wr wb, kali ini saya mau sharing ilmu mengenai belajar menggunakan curl di php. Curl merupakan sebuah library yang di gunakan untuk berkomunikasi dan melakukan HTTP request tanpa campur tangan dari sisi user atau sisi client. Secara lengkap  konfigurasi penggunaan curl di PHP dan fungsi-fungsinya dapat anda baca dokumentasinya disini php manual.

Belajar menggunakan Curl di PHP

Saya disini akan memberikan contoh secara dasar penggunaan curl untuk mendapatkan sebuah konten dalam sebuah Url. Berikut adalah fungsi yang secara umum di gunakan.

1

2

3

4

resource curl_init ( [string url])

bool curl_setopt ( resource curl_handle, string option, mixed value)

mixed curl_exec ( resource curl_handle)

mixed curl_close ( resource curl_handle)

  • curl_init : digunakan untuk menginisialisasi curl
  • curl_setopt : digunakan untuk memberi opsi yang akan digunakan untuk mengeksekusi sebuah curl
  • curl_exec : digunakan untuk mengeksekusi curl
  • curl_close : digunakan untuk menutup curl

Contoh penggunaan

Saya akan melakukan request ke halaman http://www.php.net dan di simpan pada file test.php, berikut penampakan kodenya.

1

2

3

4

5

6

7

8

9

    $curl = curl_init();

    curl_setopt ($curl, CURLOPT_URL, "http://www.php.net");

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

 

    $result = curl_exec ($curl);

    curl_close ($curl);

    print $result;

?>

Untuk beberapa opsi yang dapat dimasukkan sebagai parameter pada fungsi curl_setopt() dapat dilihat disini php manual. Berikut adalah hasil pengujian dari script php curl di atas.

Cara menggunakan php simple curl

belajar menggunakan Curl di PHP

Dari hasil di atas, file test.php tersebut akan menangkap seluruh konten yang terdapat pada halaman http://www.php.net, ibaratnya kita mengakses sebuah halaman pada website tanpa membuka halaman tersebut, semua di lakukan dari sisi server . Membuat curl ternyata tidak sulit bukan, anda dapat memanfaatkan curl untuk melakukan http request dan melengkapi aplikasi anda sesuai dengan kebutuhan.

Sekian tutorial dari saya mengenai belajar menggunakan Curl di PHP. Semoga dapat bermanfaat, gunakan secara bijak apa yang telah anda pelajari. Terimakasih.

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

cURL adalah alat untuk mentransfer file dan data dengan sintaks URL, mendukung banyak protokol, termasuk HTTP, FTP, TELNET dan banyak lagi. Awalnya, cURL ini dirancang untuk menjadi alat baris perintah. Beruntung bagi kita, library cURL ini juga didukung dengan PHP. Dalam artikel ini, kita akan melihat beberapa fitur canggih cURL, dan bagaimana kita dapat menggunakannya dalam skrip PHP kita.

Mengapa cURL?

Memang benar bahwa ada cara lain untuk mengambil isi dari suatu halaman web. Berkali-kali, sebagian besar karena kemalasan, saya hanya menggunakan fungsi PHP sederhana bukan cURL:

$content = file_get_contents("http://www.nettuts.com");

// or

$lines = file("http://www.nettuts.com");

// or

readfile("http://www.nettuts.com");

Namun mereka hampir tidak memiliki fleksibilitas dan kekurangan akan penanganan kesalahan. Selain itu, ada beberapa tugas tertentu yang tidak dapat Anda lakukan, seperti berurusan dengan cookie, otentikasi, pengiriman form, upload file, dll.

cURL adalah library yang hebat yang mendukung banyak protokol, opsi, dan memberikan informasi rinci tentang permintaan URL.

Struktur Dasar

Sebelum kita beralih ke yang lebih rumit contoh, mari kita tinjau struktur dasar dari sebuah permintaan cURL di PHP. Ada empat langkah utama:

  1. Menginisialisasi
  2. Mengatur Opsi
  3. Mengeksekusi dan Mengambil Hasil
  4. Membebaskan handle cURL
// 1. initialize
$ch = curl_init();

// 2. set the options, including the url
curl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

// 3. execute and fetch the resulting HTML output
$output = curl_exec($ch);

// 4. free up the curl handle
curl_close($ch);

Langkah #2 (yaitu panggilan curl_setopt()) akan menjadi bagian besar dari artikel ini, karena itu adalah di mana semua keajaiban terjadi. Ada daftar panjang dari pilihan cURL yang dapat diatur, yang dapat mengkonfigurasi permintaan URL secara rinci. Mungkin sulit untuk melewati keseluruhan daftar dan mencerna semuanya sekaligus. Jadi hari ini, kita hanya akan menggunakan beberapa pilihan yang lebih umum dan yang berguna dalam berbagai contoh kode.

Memeriksa Kesalahan

Secara opsional, Anda juga dapat menambahkan pengecekan error:

// ...

$output = curl_exec($ch);

if ($output === FALSE) {

  echo "cURL Error: " . curl_error($ch);

}

// ...

Harap dicatat bahwa kita perlu menggunakan "=== FALSE" untuk perbandingan, bukan "== FALSE". Karena kita perlu membedakan antara keluaran kosong vs. nilai boolean FALSE, yang menunjukkan sebuah kesalahan.

Mendapatkan Informasi

Langkah opsional yang lain adalah untuk mendapatkan informasi tentang permintaan cURL, setelah dijalankan.

// ...

curl_exec($ch);

$info = curl_getinfo($ch);

echo 'Took ' . $info['total_time'] . ' seconds for url ' . $info['url'];

// ...

Informasi berikut ini termasuk dalam array yang dikembalikan:

  • "url"
  • "content_type"
  • "http_code"
  • "header_size"
  • "request_size"
  • "filetime"
  • "ssl_verify_result"
  • "redirect_count"
  • "total_time"
  • "namelookup_time"
  • "connect_time"
  • "pretransfer_time"
  • "size_upload"
  • "size_download"
  • "speed_download"
  • "speed_upload"
  • "download_content_length"
  • "upload_content_length"
  • "starttransfer_time"
  • "redirect_time"

Mendeteksi Pengalihan Berdasarkan pada Browser

Dalam contoh pertama ini, kita akan menulis sebuah skrip yang dapat mendeteksi pengalihan URL berdasarkan pada berbagai pengaturan browser. Misalnya, beberapa situs mengalihkan browser ponsel, atau bahkan peselancar dari negara yang berbeda.

Kita akan menggunakan opsi CURLOPT_HTTPHEADER untuk menentukan HTTP Headers yang keluar termasuk user agent string dan bahasa yang diterima. Akhirnya kita akan memeriksa untuk melihat apakah situs-situs ini berusaha untuk mengarahkan kita ke URL yang berbeda.

// test URLs
$urls = array(
	"http://www.cnn.com",
	"http://www.mozilla.com",
	"http://www.facebook.com"
);
// test browsers
$browsers = array(

	"standard" => array (
		"user_agent" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)",
		"language" => "en-us,en;q=0.5"
		),

	"iphone" => array (
		"user_agent" => "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3",
		"language" => "en"
		),

	"french" => array (
		"user_agent" => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)",
		"language" => "fr,fr-FR;q=0.5"
		)

);

foreach ($urls as $url) {

	echo "URL: $url\n";

	foreach ($browsers as $test_name => $browser) {

		$ch = curl_init();

		// set url
		curl_setopt($ch, CURLOPT_URL, $url);

		// set browser specific headers
		curl_setopt($ch, CURLOPT_HTTPHEADER, array(
				"User-Agent: {$browser['user_agent']}",
				"Accept-Language: {$browser['language']}"
			));

		// we don't want the page contents
		curl_setopt($ch, CURLOPT_NOBODY, 1);

		// we need the HTTP Header returned
		curl_setopt($ch, CURLOPT_HEADER, 1);

		// return the results instead of outputting it
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

		$output = curl_exec($ch);

		curl_close($ch);

		// was there a redirection HTTP header?
		if (preg_match("!Location: (.*)!", $output, $matches)) {

			echo "$test_name: redirects to $matches[1]\n";

		} else {

			echo "$test_name: no redirection\n";

		}

	}
	echo "\n\n";
}

Pertama kita harus mengatur URL untuk menguji, diikuti oleh serangkaian pengaturan browser untuk menguji masing-masing URL tersebut terhadapnya. Kemudian kita loop melalui uji kasus dan membuat permintaan cURL untuk masing-masing.

Karena cara pengaturan opsi cURL, output yang dikembalikan hanya akan berisi HTTP headers (disimpan di $output). Dengan regex sederhana, kita bisa melihat jika ada header "Location:" disertakan.

Ketika Anda menjalankan skrip ini, Anda harus mendapatkan output seperti ini:

Cara menggunakan php simple curl
Cara menggunakan php simple curl
Cara menggunakan php simple curl

Melakukan POST ke URL

Pada sebuah permintaan GET, data dapat dikirim ke URL melalui "query string". Sebagai contoh, ketika Anda melakukan pencarian di Google, istilah pencarian berlokasi di bagian query string dari URL:

http://www.google.com/search?q=nettuts

Anda mungkin tidak perlu cURL untuk mensimulasikannya di skrip web. Anda bisa menjadi malas dan mendapatkan url tersebut dengan "file_get_contents()" untuk menerima hasilnya.

Tapi beberapa form HTML ditetapkan untuk metode POST. Bila form ini dikirimkan melalui browser, data dikirim melalui body HTTP Request, bukan query string. Misalnya, jika Anda melakukan pencarian pada forum CodeIgniter, Anda akan mem-POST permintaan pencarian Anda ke:

http://codeigniter.com/forums/do_search/

Kita dapat menulis skrip PHP untuk mensimulasikan jenis permintaan URL ini. Pertama mari kita buat file untuk menerima dan menampilkan data POST. Mari kita sebut post_output.php:

print_r($_POST);

Selanjutnya kita membuat skrip PHP untuk melakukan permintaan cURL:

$url = "http://localhost/post_output.php";

$post_data = array (
	"foo" => "bar",
	"query" => "Nettuts",
	"action" => "Submit"
);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// we are doing a POST request
curl_setopt($ch, CURLOPT_POST, 1);
// adding the post variables to the request
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

$output = curl_exec($ch);

curl_close($ch);

echo $output;

Ketika Anda menjalankan skrip ini, Anda harus mendapatkan output seperti ini:

Cara menggunakan php simple curl

Ia mengirim POST ke skrip post_output.php, yang dibuang variabel $_POST, dan kami menangkap output-nya melalui cURL.

Upload File

Meng-upload file bekerja sangat mirip dengan contoh POST sebelumnya, karena semua form upload file memiliki metode POST.

Pertama-tama mari kita buat file untuk menerima permintaan tersebut dan menyebutnya upload_output.php:

print_r($_FILES);

Dan berikut adalah skrip yang sebenarnya melakukan upload file:

// 1. initialize
$ch = curl_init();

// 2. set the options, including the url
curl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

// 3. execute and fetch the resulting HTML output
$output = curl_exec($ch);

// 4. free up the curl handle
curl_close($ch);
0

Bila Anda ingin meng-upload sebuah file, semua yang harus Anda lakukan adalah menyampaikan path file seperti variabel posting, dan menempatkan simbol @ di depannya. Sekarang ketika Anda menjalankan skrip ini, Anda harus mendapatkan output seperti ini:

Cara menggunakan php simple curl
Cara menggunakan php simple curl
Cara menggunakan php simple curl

Multi cURL

Salah satu fitur yang lebih canggih dari cURL adalah kemampuan untuk menciptakan sebuah handle "multi" cURL. Hal ini memungkinkan Anda untuk membuka koneksi ke beberapa URL secara bersamaan dan asinkron.

Pada permintaan cURL regular, eksekusi skrip akan berhenti dan menunggu permintaan URL untuk menyelesaikan sebelum dapat melanjutkan. Jika Anda berniat untuk mendapatkan beberapa URL, ini dapat memakan waktu yang lama, karena Anda hanya dapat meminta satu URL pada satu waktu. Kita dapat mengatasi keterbatasan ini dengan menggunakan handle multi.

Mari kita lihat pada contoh kode dari php.net:

// 1. initialize
$ch = curl_init();

// 2. set the options, including the url
curl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

// 3. execute and fetch the resulting HTML output
$output = curl_exec($ch);

// 4. free up the curl handle
curl_close($ch);
1

Idenya adalah Anda dapat membuka beberapa handle cURL dan menetapkan mereka ke handle multi tunggal. Kemudian Anda dapat menunggu mereka untuk menyelesaikan mengeksekusi sementara berada di loop.

Ada dua loop utama dalam contoh ini. Pertama loop do-while berulang kali memanggil curl_multi_exec(). Fungsi ini adalah non-blocking. Ia mengeksekusi sesedikit mungkin dan mengembalikan nilai status. Selama nilai yang dikembalikan adalah konstan 'CURLM_CALL_MULTI_PERFORM', itu berarti bahwa ada pekerjaan yang masih harus dilakukan (misalnya, mengirimkan http headers ke URL.) Itu sebabnya kami terus memanggilnya sampai nilai yang dikembalikan adalah sesuatu yang lain.

Dalam loop while berikut, kita terus melanjutkan selama variabel $active adalah 'true'. Ini disampaikan sebagai argumen kedua ke panggilan curl_multi_exec(). Ini sudah diatur untuk 'true' selama ada koneksi aktif dalam handle multi. Hal berikutnya yang kita lakukan adalah memanggil curl_multi_select(). Fungsi ini adalah 'memblokir' sampai ada aktivitas koneksi, seperti menerima respon. Ketika itu terjadi, kita pergi ke lain loop do-while lainnya untuk melanjutkan mengeksekusi.

Mari kita lihat jika kita dapat membuat contoh yang bekerja milik kita sendiri, yang memiliki tujuan praktis.

Bayangkan sebuah blog dengan banyak posting yang berisi link ke situs web eksternal. Beberapa dari link ini mungkin akhirnya mati setelah beberapa saat untuk berbagai alasan. Mungkin halaman sudah tidak ada lagi, atau seluruh situs web hilang.

Kita akan membangun sebuah skrip yang menganalisis semua link dan menemukan situs non-loading dan halaman 404 dan mengembalikan laporan ke kita.

Catat bahwa ini tidak akan menjadi plug-in Wordpress yang sebenarnya. Itu hanya sebuah skrip utilitas yang berdiri sendiri, dan ini adalah hanya untuk tujuan demonstrasi.

Jadi mari kita mulai. Pertama kita perlu untuk mengambil link dari database:

// 1. initialize
$ch = curl_init();

// 2. set the options, including the url
curl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

// 3. execute and fetch the resulting HTML output
$output = curl_exec($ch);

// 4. free up the curl handle
curl_close($ch);
2

Pertama kami memiliki beberapa konfigurasi database, diikuti oleh sebuah array dari nama domain akan kita abaikan ($excluded_domains). Juga kita menetapkan jumlah koneksi simultan maksimum kita akan menggunakannya nanti ($max_connections). Kemudian kita terhubung ke database, mengambil posting yang berisi link, dan mengumpulkannya ke dalam sebuah array ($url_list).

Kode berikut mungkin sedikit kompleks, jadi saya akan mencoba untuk menjelaskan dalam langkah-langkah kecil.

// 1. initialize
$ch = curl_init();

// 2. set the options, including the url
curl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

// 3. execute and fetch the resulting HTML output
$output = curl_exec($ch);

// 4. free up the curl handle
curl_close($ch);
3

Dan berikut ini adalah penjelasan untuk kode di atas. Angka-angka dalam daftar sesuai dengan angka-angka dalam komentar kode.

  1. Membuat handle multi.
  2. Kita akan membuat fungsi add_url_to_multi_handle() kemudian. Setiap kali ia dipanggil, ia akan menambahkan url ke handle multi. Awalnya, kita tambahkan 10 (berdasarkan $max_connections) URL untuk handle multi.
  3. Kita harus menjalankan curl_multi_exec() untuk pekerjaan awal. Selama itu mengembalikan CURLM_CALL_MULTI_PERFORM, ada pekerjaan yang harus dilakukan. Hal ini terutama untuk membuat koneksi. Ia tidak menunggu respon URL sepenuhnya.
  4. Loop utama ini berjalan selama ada beberapa kegiatan di handle multi.
  5. curl_multi_select() menunggu skrip sampai suatu kegiatan terjadi dengan permintaan URL.
  6. Lagi-lagi kita harus membiarkan cURL melakukan beberapa pekerjaan, terutama untuk pengambilan data respon.
  7. Kita memeriksa untuk info. Ada sebuah array yang dikembalikan jika permintaan URL selesai.
  8. Ada handle cURL dalam array yang dikembalikan. Kita menggunakannya untuk mengambil info pada permintaan cURL individu.
  9. Jika link mati atau habis jangka waktunya, tidak akan ada code http.
  10. Jika link adalah halaman 404, kode http akan ditetapkan ke 404.
  11. Jika tidak kita menganggap itu adalah link yang bekerja. (Anda dapat menambahkan pemeriksaan tambahan untuk kode kesalahan 500 dll...)
  12. Kami menghapus handle cURL dari handle multi sejak itu tidak lagi diperlukan, dan menutupnya.
  13. Kita sekarang dapat menambahkan url lain ke handle multi, dan lagi-lagi melakukan pekerjaan awal sebelum berpindah.
  14. Semuanya selesai. Kita dapat menutup handle multi dan mencetak laporan.
  15. Ini adalah fungsi yang menambahkan url baru ke handle multi. Variabel statis $index adalah bertambah setiap kali fungsi ini dipanggil, sehingga kami dapat terus melacak apa yang kami tinggalkan.

Saya menjalankan skrip pada blog saya (dengan beberapa link yang rusak yanng ditambahkan dengan sengaja, untuk pengujian), dan di sini adalah apa yang tampak:

Cara menggunakan php simple curl
Cara menggunakan php simple curl
Cara menggunakan php simple curl

Butuh hanya kurang dari 2 detik untuk melewati sekitar 40 URL. Kinerja keuntungan yang signifikan ketika berhadapan dengan set URL yang lebih besar. Jika Anda membuka sepuluh koneksi pada saat yang sama, ini dapat berjalan hingga sepuluh kali lebih cepat. Juga, Anda hanya dapat menggunakan sifat non-blocking dari handle multi cURL agar melakukan permintaan URL tanpa mengulur-ulur skrip web Anda.

Beberapa Opsi cURL Berguna Lainnya

HTTP Authentication

Jika ada otentikasi HTTP berbasis pada URL, Anda dapat menggunakan ini:

// 1. initialize
$ch = curl_init();

// 2. set the options, including the url
curl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

// 3. execute and fetch the resulting HTML output
$output = curl_exec($ch);

// 4. free up the curl handle
curl_close($ch);
4

FTP Upload

PHP memiliki library FTP, tetapi Anda juga dapat menggunakan cURL:

// 1. initialize
$ch = curl_init();

// 2. set the options, including the url
curl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

// 3. execute and fetch the resulting HTML output
$output = curl_exec($ch);

// 4. free up the curl handle
curl_close($ch);
5

Menggunakan Proxy

Anda dapat melakukan permintaan URL Anda melalui proxy:

// 1. initialize
$ch = curl_init();

// 2. set the options, including the url
curl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

// 3. execute and fetch the resulting HTML output
$output = curl_exec($ch);

// 4. free up the curl handle
curl_close($ch);
6

Fungsi Callback

Ada kemungkinan untuk meminta panggilan cURL melalui fungsi callback selama permintaan URL, sebelum ia selesai. Misalnya, karena isi dari respon sedang didownload, Anda bisa mulai menggunakan datanya, tanpa menunggu keseluruhan download selesai.

// 1. initialize
$ch = curl_init();

// 2. set the options, including the url
curl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

// 3. execute and fetch the resulting HTML output
$output = curl_exec($ch);

// 4. free up the curl handle
curl_close($ch);
7

Fungsi callback HARUS mengembalikan panjang string, yang merupakan syarat agar bekerja dengan benar.

Ketika respon URL sedang diambil, setiap kali sebuah paket data diterima, fungsi callback dipanggil.

Kesimpulan

Kami telah menjelajahi kekuatan dan fleksibilitas dari library cURL hari ini. Saya harap Anda menikmati dan belajar dari artikel ini. Pada waktu berikutnya Anda perlu membuat permintaan URL dalam aplikasi web Anda, pertimbangkan untuk menggunakan cURL.

Terima kasih dan miliki hari yang menyenangkan!

Apakah Anda tahu bahwa Anda bisa mendapatkan hingga $600 untuk menulis tutorial PLUS dan/atau screencast untuk kami? Kami sedang mencari tutorial mendalam dan yang ditulis dengan baik tentang HTML, CSS, PHP, dan JavaScript. Jika Anda memiliki kemampuan tersebut, silakan hubungi Jeffrey di [email protected].

Harap dicatat bahwa kompensasi yang sebenarnya akan tergantung pada kualitas akhir dari tutorial dan screencast.

Apa itu PHP cURL?

Client URL atau umumnya disingkat menjadi cURL, adalah project open source yang berupa program yang berjalan pada command line (CMD), namun saat ini sudah tersedia library pada banyak bahasa pemrograman seperti PHP, Phyton, dan masih banyak lainya.

Apa itu Fungsi cURL?

Client URL (cURL) adalah command yang biasa digunakan untuk mengirim dan mengambil data melalui URL. cURL Command dapat dijalankan pada command line Linux.

Tuliskan langkah instalasi cURL?

Cara Install dan Menggunakan cURL pada Windows.
Download cURL di curl.se/windows/. ... .
Ekstrak cURL yang tadi sudah Anda download. ... .
Agar bisa digunakan di Command Prompt (cmd) kita perlu memasukkan cURL ke dalam path terlebih dahulu. ... .
Setelah itu pilih Environment Variables..

Apa itu cURL api?

Curl adalah “alat baris perintah untuk mentransfer data yang ditentukan dengan sintaks URL”, yang membuatnya berguna untuk berinteraksi dengan REST APIs dan sumber situs lainnya.