Mengatasi Masalah OpenSSL Error Pada Parsing XML di PHP

Sharing is caring!

Di dalam PHP, tersedia function untuk melakukan parsing data XML yang berasal dari situs tertentu dengan mudah . Function tersebut adalah simplexml_load_file(). Penggunaan dari function ini cukup mudah yaitu tinggal tuliskan saja target URL nya di dalam parameter function tersebut.

Namun, terkadang di balik kemudahan penggunaan function simplexml_load_file() muncul juga masalah yaitu adanya Error OpenSSL ketika proses parsingnya. Bagaimana cara mengatasinya? artikel ini akan membahasnya secara jelas.

Seperti yang telah dijelaskan sebelumnya bahwa penggunaan function simplexml_load_file() untuk proses parsing xml dari situs tertentu cukup mudah. Sebagai contoh misalnya diberikan script berikut ini yang mencoba memparsing data XML dari situs w3schools.com:

<?php
$dataXML = simplexml_load_file("https://www.w3schools.com/xml/note.xml");
print_r($dataXML);
?>

Output hasil parsing script di atas adalah

SimpleXMLElement Object
(
    [to] => Tove
    [from] => Jani
    [heading] => Reminder
    [body] => Don't forget me this weekend!
)

Namun, terkadang proses parsing XML dengan function simplexml_load_file() seperti di atas tidak berjalan alias terdapat error, yaitu:

Warning: simplexml_load_file() [function.simplexml-load-file]: SSL operation failed with code 1. OpenSSL Error messages: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure in …

Biasanya error di atas muncul ketika menggunakan PHP versi lama dan situs yang menjadi target menggunakan protokol https://. Kemungkinan besar error tersebut disebabkan adanya permasalahan pada konfigurasi certificate SSL yang ada di PHP nya.

Lantas, bagaimana solusinya? Solusinya adalah dengan menggunakan CURL terlebih dahulu untuk membaca data XML. Data XML yang dibaca dengan CURL ini masih dalam format string. Selanjutnya string XML tersebut barulah diparsing menggunakan simplexml_load_string();

Mengapa menggunakan CURL untuk membaca data XML nya? Ya.. karena di dalam CURL kita bisa mensetting supaya tidak ada proses verifikasi SSL nya yang menjadi sebab munculnya error di atas.

Berdasarkan ide di atas, perhatikan contoh implementasinya berikut ini!

<?php
// target url data xml nya
$url = "https://...";
// setting curl
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// menonaktifkan proses verifikasi SSL
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// baca data xml dalam bentuk string
$xmlresponse = curl_exec($ch);
// proses parsing xml
$xml=simplexml_load_string($xmlresponse);
// menampilkan struktur hasil parsing
print_r($xml);
?>

Berdasarkan pengalaman pribadi, teknik di atas cukup ampuh sebagai alternatif cara dari proses parsing xml dengan simplexml_load_file(), dan… alhamdulillaah terbukti sukses.

Semoga tip/trik ini dapat membawa manfaat bagi yang mengalami masalah serupa seperti yang telah dijelaskan di atas.

Tinggalkan Komentar