How To Send HTTP POST Request Using PHP cURL?

Published October 24, 2024

Problem: Sending HTTP POST Requests with PHP cURL

Sending HTTP POST requests is a common task in web development. Developers use it to submit data to servers or interact with APIs. PHP's cURL library offers a way to send these requests, but you need to set it up correctly.

Step-by-Step Solution: Implementing POST Request with PHP cURL

Setting Up the cURL Session

To start using cURL in PHP, initialize a session with the curl_init() function. After initialization, set basic options for the session.

$ch = curl_init();

Tip: Verify SSL Certificates

For secure connections, it's recommended to verify SSL certificates. Set the following option:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

Preparing the POST Data

When sending a POST request, format your data correctly. Use an array and the http_build_query() function to convert it into a URL-encoded string.

$postData = [
    'username' => 'user1',
    'password' => 'passuser1',
    'gender' => '1'
];
$postFields = http_build_query($postData);

Configuring cURL Options for POST

After preparing your data, configure cURL options for the POST request. Set the URL, specify the request method as POST, and add the POST fields.

curl_setopt($ch, CURLOPT_URL, "http://www.example.com/tester.phtml");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);

Executing the Request and Handling the Response

To send the request and capture the server's response, execute the cURL session and store the result. Handle potential errors.

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);

if ($response === false) {
    $error = curl_error($ch);
    // Handle the error
} else {
    // Process the response
    if ($response == "OK") {
        // Request was successful
    } else {
        // Handle other responses
    }
}

Example: Setting a Request Timeout

To prevent your script from hanging indefinitely, set a timeout for the cURL request:

curl_setopt($ch, CURLOPT_TIMEOUT, 30); // Timeout after 30 seconds

Closing the cURL Session

After you've finished with the cURL session, close it to free up system resources.

curl_close($ch);

By following these steps, you can send HTTP POST requests using PHP cURL, handle the server's response, and manage the cURL session properly.