Ada situasi ketika Anda ingin mengirim data menggunakan <form method="post" action="//www.domainname.com/target_url.php"> 1 ke URL, baik lokal maupun jarak jauh. Mengapa Anda ingin melakukan ini? . Atau mungkin Anda ingin mengirim data ke beberapa aplikasi untuk berbagai keperluan, yang tidak mungkin dilakukan dengan cara biasa. Jadi bagaimana kita bisa mengatasi masalah ini?
Simulasikan pengiriman formulir menggunakan cURL
Jadi apa itu cURL? . cURL juga menggunakan HTTPS, sehingga dapat digunakan untuk berkomunikasi dengan server yang aman
Yang akan kita gunakan adalah, cURL HTTP. cURL mendukung metode POST dan GET, pengunggahan file, cookie, otentikasi pengguna/kata sandi, bahkan menggunakan server proxy untuk menghubungkan
Ini benar-benar dapat digunakan untuk mensimulasikan perilaku penelusuran secara terprogram. Itu dapat terhubung ke situs jarak jauh, login dengan memposting nama pengguna dan kata sandi ke formulir login atau dengan menggunakan otentikasi HTTP, kemudian mengambil halaman atau mengunggah file. Semua ini menggunakan kode PHP murni
Jadi bagaimana cara menggunakan cURL untuk mengirim data?
Mulailah dengan membuat koneksi baru
$curl_connection = curl_init('//www.domainname.com/target_url.php'); _
Koneksi baru dibuat menggunakan fungsi curl_init(), yang menggunakan URL target sebagai parameter (URL tempat kami ingin memposting data kami). URL target sama dengan parameter "aksi" dari bentuk normal, yang akan terlihat seperti ini
<form method="post" action="//www.domainname.com/target_url.php">
Sekarang mari kita atur beberapa opsi untuk koneksi kita. Kita bisa melakukan ini dengan menggunakan fungsi curl_setopt(). Buka halaman referensi curl_setopt() untuk informasi lebih lanjut tentang curl_setopt() dan daftar opsi lengkap
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($curl_connection, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);
Opsi apa yang kita tetapkan di sini?
Pertama, kami menyetel batas waktu koneksi menjadi 30 detik, jadi skrip kami tidak menunggu tanpa batas waktu jika server jarak jauh gagal merespons
Kemudian kami mengatur bagaimana cURL akan mengidentifikasi dirinya ke server jarak jauh. Beberapa server akan mengembalikan konten yang berbeda untuk browser yang berbeda (atau agen, seperti spider dari mesin pencari), jadi kami ingin permintaan kami terlihat seperti berasal dari browser populer
<form method="post" action="//www.domainname.com/target_url.php"> 2 disetel ke true memaksa cURL untuk tidak menampilkan keluaran permintaan, tetapi mengembalikannya sebagai string
Kemudian kami menyetel opsi <form method="post" action="//www.domainname.com/target_url.php"> 3 ke false, sehingga permintaan tidak akan memicu kesalahan jika sertifikat SSL tidak valid, kedaluwarsa, atau tidak ditandatangani
Terakhir, kami menetapkan <form method="post" action="//www.domainname.com/target_url.php"> _4 ke 1 untuk menginstruksikan cURL untuk mengikuti “Location. " pengalihan ditemukan di header yang dikirim oleh situs jarak jauh
Sekarang kita harus menyiapkan data yang ingin kita posting. Pertama-tama kita dapat menyimpan ini dalam sebuah array, dengan kunci elemen yang sama dengan nama input dari formulir reguler, dan nilainya adalah nilai yang ingin kita posting untuk bidang itu
Misalnya, jika dalam bentuk biasa kita akan memilikinya
<input type="text" name="firstName" value="Name"> <input type="hidden" name="action" value="Register">
kami menambahkan ini ke array kami seperti ini
$post_data['firstName'] = 'Name'; $post_data['action'] = 'Register' _
Lakukan hal yang sama untuk setiap bidang formulir
Data akan diposting dalam format berikut. <form method="post" action="//www.domainname.com/target_url.php"> 5
Untuk memformat data seperti ini, kita akan membuat string untuk setiap key-value pair (misalnya key1=value1), memasukkannya ke dalam array lain ($post_items) lalu menggabungkannya menjadi satu string menggunakan fungsi PHP implode()
foreach ( $post_data as $key => $value) { $post_items[] = $key . '=' . $value; } $post_string = implode ('&', $post_items);
Selanjutnya, kita perlu memberi tahu cURL string mana yang ingin kita posting. Untuk ini, kami menggunakan opsi CURLOPT_POSTFIELDS
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);
Terakhir, kita eksekusi postingannya, lalu tutup koneksinya
$result = curl_exec($curl_connection); curl_close($curl_connection);
Saat ini, data seharusnya sudah diposting ke URL jarak jauh. Periksa ini, dan jika tidak berfungsi dengan baik, gunakan fungsi <form method="post" action="//www.domainname.com/target_url.php"> 6 untuk melihat kesalahan yang mungkin terjadi
print_r(curl_getinfo($curl_connection));
Baris ini menampilkan berbagai informasi mengenai transfer. Ini harus digunakan sebelum menutup koneksi dengan <form method="post" action="//www.domainname.com/target_url.php"> 7;
Anda juga dapat melihat nomor dan deskripsi kesalahan dengan menampilkan <form method="post" action="//www.domainname.com/target_url.php"> 8 dan <form method="post" action="//www.domainname.com/target_url.php"> 9
Jadi mari kita satukan semuanya. Ini kode kami
<?php //create array of data to be posted $post_data['firstName'] = 'Name'; $post_data['action'] = 'Register'; //traverse array and prepare data for posting (key1=value1) foreach ( $post_data as $key => $value) { $post_items[] = $key . '=' . $value; } //create the final string to be posted using implode() $post_string = implode ('&', $post_items); //create cURL connection $curl_connection = curl_init('//www.domainname.com/target_url.php'); //set options curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($curl_connection, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); //set data to be posted curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string); //perform our request $result = curl_exec($curl_connection); //show information regarding the request print_r(curl_getinfo($curl_connection)); echo curl_errno($curl_connection) . '-' . curl_error($curl_connection); //close the connection curl_close($curl_connection); ?>
Posting data formulir tanpa menggunakan cURL
Jika server hosting Anda tidak dilengkapi dengan cURL terpasang (walaupun hal ini jarang terjadi karena cURL dipasang di sebagian besar server hosting komersial) dan Anda juga tidak memiliki akses ke server untuk memasangnya, ada alternatif lain
Salah satunya adalah menggunakan fungsi PHP curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($curl_connection, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); 0 dan curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($curl_connection, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); 1 untuk mengirim data yang diformat dengan benar ke server jarak jauh. Berikut adalah contoh kode yang melakukan hal ini