ارسال درخواست post با curl در PHP

mohsen2 هفته قبل
ارسال شده در
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 ارتباط برقرار کنید.

رای
0
ارسال نظر
مرتب سازی:
اولین نفری باشید که نظر می دهید!