ارسال درخواست post با curl در PHP
فرض کنید می خواهیم بوسیله PHP درخواستی را برای آدرس http://www.example.com
با دادههایی به شکل زیر ارسال کنیم:
username=user1, password=passuser1, gender=1
ارسال ساده با curl
<?php
$ch = curl_init('http://www.example.com'); // ایجاد یک رشته جدید برای cURL
// تنظیم گزینههای cURL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // اجازه دهید تا پاسخ بهصورت متن بازگردد
curl_setopt($ch, CURLOPT_POST, true); // استفاده از متد POST
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'username' => 'user1',
'password' => 'passuser1',
'gender' => 1,
]);
// ارسال درخواست و دریافت پاسخ
$response = curl_exec($ch);
// بستن ارتباط cURL
curl_close($ch);
// پردازش پاسخ
var_dump($response);
?>
این کد یک درخواست POST به آدرس مورد نظر ارسال میکند و پاسخ را نمایش میدهد. با استفاده از var_dump
میتوانید نتایج را بررسی کنید.
رفع مشکل HTTPS
اگر در زمان ارسال درخواست به آدرسی با پروتکل HTTPS با خطای certificate verify failed
مواجه شدید، حتماً باید تنظیمات مربوط به گواهینامههای SSL را به درستی پیکربندی کنید. برای این کار می توانید تنظیمات زیر را به فایل php.ini
اضافه کنید تا اطمینان حاصل شود که curl میتواند گواهینامهها را به درستی تأیید کند:
curl.cainfo=c:\php\cacert.pem
این تنظیمات شامل مسیر به فایل cacert.pem
است که میتوان آن را از اینترنت دانلود کرد.
راه دیگر استفاده از تنظیمات زیر به منظور نادیده گرفتن بررسی سرتیفیکیت سرور بوسیله curl است. که به دلیل وجود مشکلات امنیتی و امکان نشت اطلاعات توصیه نمی شود.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
مثال شی گرای cURL
همچنین میتوانید از یک کلاس برای سازماندهی بهتر کد خود استفاده کنید:
<?php
namespace MyApp\Http;
class CurlPost
{
private $url;
private $options;
public function __construct($url, array $options = [])
{
$this->url = $url;
$this->options = $options;
}
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);
curl_close($ch);
if ($errno !== 0) {
throw new \RuntimeException($error, $errno);
}
return $response;
}
}
// استفاده از کلاس
$curl = new \MyApp\Http\CurlPost('http://www.example.com');
try {
echo $curl([
'username' => 'user1',
'password' => 'passuser1',
'gender' => 1,
]);
} catch (\RuntimeException $ex) {
die(sprintf('Http error %s with code %d', $ex->getMessage(), $ex->getCode()));
}
?>
در این کد یک کلاس تعریف شده است که به شما اجازه میدهد بهسادگی با HTTP POST ارتباط برقرار کنید.