Skip to main content

CURL_PHP: untuk send-request antar web server

CURL, Client URL Library
FORM HTTP POST
CURL IN ACTION


Libcurl membuat semua jenis komunikasi antar sever mungkin terjadi dengan berbagai macam cara. Bisa dengan protocol http, https, ftp, gopher, telnet, dict, dan ldap dengan dukungan HTTPS certificate, HTTP POST, HTTP PUT, FTP uploading, upload berbasis HTTP form, proxy, cookies, bahkan autentifikasi user dan password. Yang akan dibahas untuk sementara ini adalah HTTP FORM. CURL harus diaktifkan dulu melalui php.ini di bagian windows extention ( untuk windows ) dengan menghilangkan comment di extension=php_curl.dll.

Untuk mengembangkan imaginasi, situasi yang mungkin memerlukan adanya curl:

- Pengiriman data ke server web dengan berbasis FORM HTTP GET dilakukan dengan mengisi sebuah form dengan method GET yang hasilnya ditampilkan dalam url tujuan. Tapi pengiriman juga bisa dilakukan tanpa mengisi sebuah form, cukup dengan memanggil alamatnya, misalkan https://ebank.com/getstatus.php?no=1&pengirim=011&nominal=1000000, maka data bisa dikirim. Proses tersebut tentu saja bisa digantikan oleh mesin secara otomatis, baik dengan javascript location.assign maupun dengan referal php header. Sedangkan pada skrip penerima, semua parameter yang dikirim ada pada Predefined variabel $_GET atau $HTTP_GET_VARS, atau juga bisa $_REQUEST di file getstatus.php. Kesimpulannya, FORM HTTP GET bisa digunakan untuk pengiriman data antar server, dan terlalu sederhana dan bodoh untuk dibahas lebih lanjut. Tapi tetap saja memanfaatkan curl akan membuat proses ribuan kali lebih cepat dan otomatis

- Itu untuk kasus GET, sekarang bagaimana dengan FORM HTTP POST? Form post merupakan kebalikan dari get, semua variabel tidak dilewatkan melalui sebuah alamat link. POST dirancang agar data berasal dari sebuah form dengan method POST dengan skrip penerimanya ada pada bagian action, bukan lagi berasal dari sebuah link. Itulah sebabnya GET banyak digunakan untuk form yang memungkinkan untuk kembali dengan mudah, bookmark-able page, sedangkan POST hampir selalu digunakan untuk semua form untuk pengiriman data dan upload file. Sedangkan pada skrip penerima, semua parameter yang dikirim ada pada Predefined variabel $_POST atau $HTTP_POST_VARS di file getstatus.php. Pengiriman data tidak bisa dilakukan secara otomatis dengan memanggil alamat action dari form, yang tentu saja malah akan mendapat apapun karena tidak ada data yang dikirimkan, atau dengan memaksakan diri dengan memaksakan diri dengan memanggil alamat lengkap dengan parameternya seperti halnya, ini bunuh dir. Ngga ada gunanya. Kecuali untuk programmer skrip penerima yang begitu lugunya menggunakan variabel global atau $_REQUEST untuk menerima datanya. Proses penerimaan dan pengiriman data untuk otomatisasi tidak bisa dilakukan dengan skrip php biasa, harus dengan mengisi sebuah form, lengkap dengan aturan untuk menekan tombol submit untuk memulai pengiriman form. Untuk alasan inilah curl diperlukan. THAT’S WHY CURL EXISTS!

- Ingin membaca halaman web dari server lain untuk ditampilkan kembali? Pake curl

- Harus mengirim data antar server? Pake curl

- Otomatisasi, tanpa perlu mengisi form berulang-ulang untuk ribuan data, cukup mengandalkan php? Pake curl

- Ingin mendapatkan status selesainya transaksi yang dilakukan web lain? Pake curl

- Ingin memberikan akses kepada web server lain untuk mendapat data yang diperlukan dari web server kita, tanpa harus memberikan akses ke database mysql secara langsung? Cukup dengan memberikan alamat skrip dan parameter yang diperlukan beserta format hasil datanya. Ini cara paling mudah dan bukan paling aman. pake curl.

- Brute force attack, mencoba ribuan kombinasi username dan password dalam sedetik, atau melumpuhkan server lain dengan mudah? Pake CURL. Itulah alasannya curl tidak diaktifkan secara default karena kekuatanya. Itulah alasannya ada algoritma UID (Unique Identity) untuk setiap pengiriman form ke pengisi. Itulah sebabnya ada captcha! Menyebalkan, kita seperti di tes membaca dan menulis sekaligus dites mata cuma untuk daftar email!, gini2, bukan cuma lulusan TK. THAT’S WHY CAPTCHA EXSIST!

Sekarang, contoh untuk penerimaan data. Skrip dibawah ini akan mengambil tampilan dari detik.com kemudian langsung menampilkan hasilnya......


<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.detik.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
?>


Sekarang, contoh untuk pengiriman data. Misalkan webserver penjual.com ingin mengetahui status transaksi dari seorang pelanggan melalui ebank.com. Apabila sudah dilakukan, menghasilkan nilai 1, apabila belum menghasilkan nilai 0. Sebagai contoh menggunakan dua buah skrip php berbeda server untuk berkomunikasi.


/* http://penjual.com/sender.php */
<?
function ambilStatusMutasi($no,$pengirim,$penerima,$nominal){
$url='http://ebank.com/receive.php'; //?no=1&pengirim=011&nominal=1000000';

$postfields = array ('no' => $no,
'pengirim' => $pengirim,
'penerima' => $penerima,
'nominal' => $nominal
);

if (!$curld = curl_init()) {
echo "CURL GAGAL.\n";
exit;
}

curl_setopt($curld, CURLOPT_POST, true);
curl_setopt($curld, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($curld, CURLOPT_URL, $url);
curl_setopt($curld, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($curld);
//echo "Received data: <hr>$output<hr>\n";
curl_close($curld);
//echo $output;
return $output;

}

//pemakaian fungsi
if(ambilStatusMutasi(“11”,”012”,”001”,”100000”)==1){
echo”Mutasi Berhasil”;
}else{
echo”Mutasi GAGAL atau belum bayar”;
}
?>




/* http://ebank.com/receive.php */
<?
$no_mutasi = $_REQUEST[no];
$pengirim = $_REQUEST[pengirim];
$penerima = $_REQUEST[penerima];
$nominal = $_REQUEST[nominal];
$result = mysql_query("select id_mutasi, id_nasabah_debit,id_nasabah_kredit,nominal from mutasi_tb where id_mutasi='$no_mutasi' and id_nasabah_debit='$pengirim' AND id_nasabah_kredit = '$penerima' AND nominal >= $nominal ");

if(mysql_num_rows($result)>0){
echo 1;
}else{
echo "0 $no_mutasi $pengirim $penerima $nominal";
}

?>


Bisa ditambahkan verifikasi $_REMOTE untuk memastikan request data berasal dari server yang diberikan akses.

Entah, kenapa php_manual yang selalu jadi andalan tidak bisa memberikan jawaban seperti ini untuk situasi dan saat tertentu.

Hari ini? Bahagia. Karena tahu segalanya......

Kadang, harus jadi orang idiot untuk mendapatkan sebuah rahasia besar

Comments

  1. Gimana mas kalau ada captha na,ada caranya gak mas?

    ReplyDelete
  2. @Anonim
    - JDownloader punya captcha yg cukup ampuh.
    http://jdownloader.org/knowledge/wiki/development/captcha/supported-captchas

    - Selain itu dia bersifat opensource, sehingga bisa kita gunakan.
    http://jdownloader.org/knowledge/wiki/development/get-started

    - Jdownloader menggunakan java, tapi java bisa dipanggil oleh php dengan mudah.
    http://php-java-bridge.sourceforge.net/

    ReplyDelete

Post a Comment

Popular posts from this blog

Java-MySql: Aplikasi Database dengan Data Gambar (Updated)

Untuk update metode simpan gambar lihat di appGambar 2.0 Bagaimana caranya menyimpan data yang membutuhkan penyimpanan data gambar? Misalkan data pegawai yang membutuhkan penyimpanan gambar dari setiap pegawai. Alternatifnya ada dua, dengan kelebihan dan kekurangan masing-masing. Cara yang pertama adalah dengan membuat field dengan tipe data binary, kemudian menyimpan gambar yang dibutuhkan dalam field di database tersebut. Cara ini membutuhkan manajemen program yang lebih rumit, tapi data gambar akan terjamin, karena tersimpan didalam database yang terintegrasi dengan data lainnya. Kekurangan lainnya adalah ukuran database yang akan membesar dan lambat. Bayangkan saja, sebuah field membutuhkan gambar dengan format jpeg, 200kB. Apabila ada 200 juta record, maka ukuran field yang diperuntukan khusus untuk gambar dengan perhitungan kasar adalah 0.2 MB x 200M = 40 x 10^12 = 40 TB. Belum ditambah dengan ukuran data dari field lainnya, kalau misalkan untuk menyimpan data penduduk Indonesia.

PHP: Kalkulator

Pada intinya, kalkulator berbasis web ini menggunakan tiga dasar, yaitu CSS, PHP, dan HTML. CSS (Cascading Style Sheets) agar mudah mengatur tampilan, PHP (PHP Hypertext Prepocessor) untuk operasi perhitungan, dan HTML (Hypertext Markup Language) untuk pembuatan form kalkulator. Kesemuanya dalam bentuk dasar dengan logika perhitungan sederhana untuk melakukan perhitungan. Sedangkan array diatas digunakan untuk debugger dan memahami jalannya algoritma. <html> <head> </head> <body> <style type="text/css"> .Hasil { color: #fcc; background-color: blue; font-size: 4em; border: 1px solid #660; padding: 4px; } .Operator { color: #fcc; background-color: #900; font-size: 1.5em; border: 1px solid #660; width: 100px; padding: 4px; } .Angka { color: white; background-color: #660; font-size: 1.5em; border: 1px solid #660; padding: 4px; width: 100px; } </style> <?php function Hitung($b1,$b2,$o){ switch($o){ case '+': return $b1

Pembuatan PDF di PHP dengan FPDF dan HTML2FPDF

Untuk membuat pdf dengan menggunakan php, kita bisa menggunakan fpdf yang berbasis class. Sedangkan html2fpdf digunakan untuk mengubah html menjadi pdf. Dengan hanya menggunakan fpdf, kita harus menentukan semua hal yang mengatur tampilannya berbasis code sesuai dengan aturan dan fungsi yang disediakan class tersebut. Dengan menggunakan html2fpdf, kita cuma perlu membuat sebuah file html dan tampilannya langsung diubah menjadi sebuah file pdf, tentu dengan beberapa keterbatasan dan perubahan tampilan. Saat ini, fpdf terbaru pada versi 1.6 sedangkan html2fpdf versi 3. Instalasi: + Ekstrak file fpdf dan html2fpdf. Sebenarnya html2fpdf merupakan inheritance dari class fpdf, tapi class di fpdf yang disdertakan di paket html2fpdf telah dimodifikasi dari aslinya sesuai dengan kebutuhan konversi tersebut. Class original dari fpdf akan kita pakai untuk pembuatan pdf secara manual, bukan dari html. + Ganti nama file fpdf.php misalkan menjadi fpdf16.php. Karena untuk bebrapa versi instalasi php