<?php
//
// A very simple PHP example that sends a HTTP POST to a remote site
//
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.example.com/tester.phtml");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
"postvar1=value1&postvar2=value2&postvar3=value3");
// In real life you should use something like:
// curl_setopt($ch, CURLOPT_POSTFIELDS,
// http_build_query(array('postvar1' => 'value1')));
// Receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close ($ch);
// Further processing ...
if ($server_output == "OK") { ... } else { ... }
?>
http_build_query()
untuk menangani parameter; cukup lewati array keCURLOPT_POSTFIELDS
cukup.CURLOPT_POSTFIELDS
array,Content-Type
header akan ditetapkanmultipart/form-data
sebagai gantiapplication/x-www-form-urlencoded
. php.net/manual/en/function.curl-setopt.phptrue
bukan1
untukCURLOPT_POST
.Prosedural
Berorientasi pada objek
Pemakaian
Catatan di sini: akan lebih baik untuk membuat beberapa jenis antarmuka yang disebut
AdapterInterface
misalnya dengangetResponse()
metode dan biarkan kelas di atas mengimplementasikannya. Kemudian Anda selalu dapat menukar implementasi ini dengan adaptor lain seperti Anda, tanpa efek samping pada aplikasi Anda.Menggunakan HTTPS / mengenkripsi lalu lintas
Biasanya ada masalah dengan cURL di PHP di bawah sistem operasi Windows. Saat mencoba terhubung ke titik akhir terproteksi https, Anda akan mendapatkan pesan kesalahan tentang hal itu
certificate verify failed
.Apa yang dilakukan kebanyakan orang di sini adalah memberi tahu perpustakaan CURL untuk mengabaikan saja kesalahan sertifikat dan melanjutkan (
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
). Karena ini akan membuat kode Anda berfungsi, Anda memperkenalkan lubang keamanan besar dan memungkinkan pengguna jahat untuk melakukan berbagai serangan pada aplikasi Anda seperti serangan Man In The Middle atau semacamnya.Tidak pernah melakukan itu. Sebagai gantinya, Anda hanya perlu memodifikasi
php.ini
dan memberi tahu PHP di manaCA Certificate
file Anda membiarkannya memverifikasi sertifikat dengan benar:Yang terbaru
cacert.pem
dapat diunduh dari Internet atau diekstrak dari browser favorit Anda . Saat mengubahphp.ini
pengaturan terkait, ingatlah untuk memulai kembali server web Anda.sumber
Contoh langsung menggunakan php curl_exec untuk melakukan posting HTTP:
Masukkan ini ke dalam file bernama foobar.php:
Kemudian jalankan dengan perintah
php foobar.php
, ini akan menampilkan output seperti ini ke layar:Jadi Anda melakukan POST PHP ke www.google.com dan mengirimkannya beberapa data.
Seandainya server diprogram untuk membaca variabel post, ia dapat memutuskan untuk melakukan sesuatu yang berbeda berdasarkan itu.
sumber
$postvars .= $key . $value;
harus$postvars .= $key . $value ."&";
atau tidak?$fields
array dan itu akan menghasilkan string kueri.curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
http_build_query
seperti:curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
Itu dapat dengan mudah dicapai dengan:
sumber
Curl Post + Penanganan Kesalahan + Set Header [terima kasih kepada @ mantas-d]:
sumber
sumber
curl_close
berada di dalamfinally
blok.Jika formulir menggunakan pengalihan, otentikasi, cookie, SSL (https), atau apa pun selain skrip yang benar-benar terbuka yang mengharapkan variabel POST, Anda akan mulai menggertakkan gigi dengan sangat cepat. Lihatlah Snoopy , yang melakukan apa yang ada dalam pikiran Anda sambil menghilangkan kebutuhan untuk mengatur banyak overhead.
sumber
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Jawaban yang lebih sederhana JIKA Anda menyampaikan informasi ke situs web Anda sendiri adalah dengan menggunakan variabel SESI. Mulailah halaman php dengan:
Jika pada titik tertentu ada informasi yang ingin Anda hasilkan dalam PHP dan diteruskan ke halaman berikutnya dalam sesi, alih-alih menggunakan variabel POST, tetapkan ke variabel SESSION. Contoh:
Kemudian pada halaman berikutnya Anda cukup merujuk variabel SESI ini. CATATAN: setelah Anda menggunakannya, pastikan Anda menghancurkannya, jadi itu tidak bertahan setelah digunakan:
sumber
Berikut adalah beberapa kode boilerplate untuk PHP + curl http://www.webbotsspidersscreenscrapers.com/DSP_download.php
termasuk dalam perpustakaan ini akan menyederhanakan pengembangan
sumber
Jika Anda mencoba masuk di situs dengan cookie.
Kode ini:
Mungkin tidak berfungsi jika Anda mencoba masuk, karena banyak situs mengembalikan status 200, tetapi posnya tidak berhasil.
Cara mudah untuk memeriksa apakah posting login berhasil adalah memeriksa apakah pengaturan cookie lagi. Jika dalam output memiliki string Set-Cookies, ini berarti posting tidak berhasil dan memulai sesi baru.
Juga posting dapat berhasil, tetapi statusnya dapat diarahkan bukan 200.
Untuk memastikan posting berhasil coba ini:
Ikuti lokasi setelah posting, jadi itu akan pergi ke halaman di mana posting melakukan redirect ke:
Dan daripada memeriksa apakah ada cookie baru dalam permintaan:
sumber
Contoh pengiriman formulir dan data mentah :
sumber