Prosedural
// set post fields
$post = [
'username' => 'user1',
'password' => 'passuser1',
'gender' => 1,
];
$ch = curl_init('http://www.example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
// execute!
$response = curl_exec($ch);
// close the connection, release resources used
curl_close($ch);
// do anything you want with your response
var_dump($response);
Berorientasi pada objek
<?php
// mutatis mutandis
namespace MyApp\Http;
class CurlPost
{
private $url;
private $options;
/**
* @param string $url Request URL
* @param array $options cURL options
*/
public function __construct($url, array $options = [])
{
$this->url = $url;
$this->options = $options;
}
/**
* Get the response
* @return string
* @throws \RuntimeException On cURL error
*/
public function __invoke(array $post)
{
$ch = curl_init($this->url);
foreach ($this->options as $key => $val) {
curl_setopt($ch, $key, $val);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$response = curl_exec($ch);
$error = curl_error($ch);
$errno = curl_errno($ch);
if (is_resource($ch)) {
curl_close($ch);
}
if (0 !== $errno) {
throw new \RuntimeException($error, $errno);
}
return $response;
}
}
Pemakaian
// create curl object
$curl = new \MyApp\Http\CurlPost('http://www.example.com');
try {
// execute the request
echo $curl([
'username' => 'user1',
'password' => 'passuser1',
'gender' => 1,
]);
} catch (\RuntimeException $ex) {
// catch errors
die(sprintf('Http error %s with code %d', $ex->getMessage(), $ex->getCode()));
}
Catatan di sini: akan lebih baik untuk membuat beberapa jenis antarmuka yang disebut AdapterInterface
misalnya dengan getResponse()
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 mana CA Certificate
file Anda membiarkannya memverifikasi sertifikat dengan benar:
; modify the absolute path to the cacert.pem file
curl.cainfo=c:\php\cacert.pem
Yang terbaru cacert.pem
dapat diunduh dari Internet atau diekstrak dari browser favorit Anda . Saat mengubah php.ini
pengaturan terkait, ingatlah untuk memulai kembali server web Anda.
http_build_query()
untuk menangani parameter; cukup lewati array keCURLOPT_POSTFIELDS
cukup.