Artikel ini hanyalah sekedar coretan, karena saya yang biasa lupa, dari pada saya harus bersusah payah untuk mencarinya kembali, lebih baik saya dokumentasikan di blog saya ini..
Seharian ini, saya mencoba bagaimana untuk mengirimkan dan menerima file XML yang dikirimkan melalui web. Ini adalah keperluan yang agak mendadak, saya harus mempersiapkan halaman web untuk koneksi dengan operator Seluler sebagai SMS content provider, sebelumnya saya hanya berhubungan dengan data SMS dari dan ke Operator dengan menggunakan hit URL biasa dengan menggunakan GET, Untuk pertama kali ini saya harus mengerjakan hal yang berbeda, yaitu mengirimkan dan menerima data XML yang dikirim kan menggunakan metode POST. lumayan menguras energi, karena saya jarang berkutat dengan PHP jadi lumayan agak lama memecahkan masalah ini. Akhirnya saya menemukan beberapa artikel yang bagus, berikut ini saya akan menulis ulang dengan berbagai penyesuaian sesuai dengan kebetuhan saya.
Ide dasarnya adalah begini, kita punya halaman web yang bisa memanggil web service lain, kita bisa melakukan posting data dalam bentuk XML kemudian mendapatkan reponsnya.
Dengan PHP, kita bisa melakukan posting data dengan mudah, kemudian untuk mengakses web service ke server tujuan, kita bisa menggunakan library PHP yaitu CURL. Dengan menggunakan CURL,untuk melakukan posting data XML, kita tinggal membuat file XML nya, kemudian menentukan URL yang mau kita tuju dan mengatur portnya.
Sebagai contoh, kita ingain melakukan posting data XML yang simple seperti dibawah ini:
Untuk setengah hari pertama, lumayan atas bantuan teman, saya bisa mengambil data berupa data XML, Data XML yang dikirimkan dengan menggunakan POST oleh operator dapat saya parsing dan saya ambil datanya. Hari kedua, lebih melelahkan, hampir seharian mencari cara bagaimana mengirimkannya. Sudah banyak sumber dari internet yang saya coba, ternyata hasilnya selalu gagal.
Akhirnya berhasil menemukan juga cara bagaimana mengirimkan data XML menggunakan POST dengan memanfaatkan PHP CURL, berikut ini caranya:
Pertama-tama, agar web server anda dapat menggunakan php-curl, pastikan dahulu bahwa apache sudah terinstall PHP Curl. Karena saya menggunakan php5, dalam debian paketnya adalah php5-curl
Berikut ini adalah contoh simple XML yang akan kita lakukan kirimkan :
<?xml version=”1.0″?>
<Document>
<Message>
INI DATAKU
</Message>
</Document>
untuk mengirimkan XML tersebut dengan menggunakan POST, kode PHP nya dapat dibuat seperti dibawah ini :
<?php
$xml = "<?xml version=\"1.0\"?>"
."<Document>"
."<Message>INI DATAKU</Message>"
."</Document>";
$url ='http://www.tujuan.com/direktori/filetujuan.php';
$port = 80;
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_PORT, $port);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
$data = curl_exec($ch);
curl_close($ch);
return $data;
?>
Kode diatas adalah kode untuk melakukan POST ke URL lain dengan memberikan data berupa XML. Anda bisa juga membuat halaman web sendiri yang digunakan untuk menerima data XML terbeut, dengan begitu anda bisa bereksperimen dengan data XML anda, sekaligus anda menyiapkan halaman web yang bisa menerima data XML dari server lain.
Berikut ini langkah-langkah untuk membuat halaman web yang bisa menerima data XML yang di POST oleh server lain:
Pertama-tama, pastikan anda sudah memberi nilai on untuk variabel always_populate_raw_post_data pada php.ini, untuk Debian, file konfigurasi php.ini ada di /etc/php5/apache2/php.ini
always_populate_raw_post_data = On
Kode php yang simple untuk halaman web yang dapat menerima data XML adalah :
<?php
$xml = $HTTP_RAW_POST_DATA;
print((trim($xml)));
?>
Untuk melakukan parsing dari data XML tersebut, anda bisa menggunakan xml_parser. PHP sudah menyediakan xml parser. Berikut ini adalah contoh simple untuk melakukan parsing dari data XML diatas:
$p = xml_parser_create();
xml_parse_into_struct($p, $xml, $vals, $index);
xml_parser_free($p);
$dataasli = $vals[1][value];
Ok.. semua berjalan sempurna…
Terima kasih untuk yang selalu memberi semangat baru untukku....
mas saya coba script yang diatas kok terjadi error ya, ini pesan error nya
Fatal error: Call to undefined function curl_init() in C:\AppServ\www\xml\kirimXML.php on line 9
saya menggunakan php5 , dan saya liat disitu juga udah include ama php_curl nya. apa mungkin ada settingan lain ato tambahan scripy
seeeep rek.. yo ngunu.
To Arie :
Dari Errornya, nampaknya APACHE anda belum support library curl, apakah anda sudah yakin bahwa web server anda menyediakan library curl? coba dilihat dengan menggunakan phpinfo();
Maaf, kalau menggurui, saya anggap anda belum bisa melihat php info nya saja ya, biar gak sepotong-sepotong memberikan penjelasannya..
coba buat file php, beri nama phpinfo.php, kemudian isikan code berikut ini :
<?phpphpinfo();
?>
kemudian letakkan file tersebut di direktori yang bisa diakses oleh web server anda
buka file tersebut dengan browser. Harusnya anda akan melihat info dari konfigurasi apache&php anda, dan ciri-ciri bahwa web server anda sudah menyediakan library curl ditunjukkan dengan tulisan berikut ini :
curl
cURL support enabled
cURL Information libcurl/7.17.1 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.1 libssh2/0.17
nampaknya di windows ya? kalau di windows, saya pernah coba juga bisa jalan, kalau di WIndows, saya menggunakan XAMPP kemudian melakukan uncomment pada php.ini seperti berikut :
extension=php_curl.dllTetap semangat mas arie, mudah kok, yang jelas dari errornya itu bahwa web server anda belum mendukung/menyalakan library curl
kl untuk methode get gimana ya mas, n kl boleh saya minta source code yang lengkap dari tutor diatas boleh g mas
mas saya mencoba kode diatas untuk menangkap xml sperti
invalid user account
ERROR
tp saya g bisa mendaptkan hasilnya, mgkin kl sperti itu gimana ya mas caranya untuk memparsingnya, saya sudah menerapkan kode mas tp belum bisa. terima kasih