PHP cURL Tutorial with Examples

PHP programming language standard library supports the cURL library named libcurl. libcurl is a library implementation of the cURL tool which is used to communicate with servers and clients by using popular protocols like HTTP, FTP, etc. cURL can be used for HTTP POST, HTTP PUT, FTP Upload requests.

PHP cURL Library

PHP cURL library generally does not installed by default for most of the Linux distributions. In Windows, all libraries including PHP cURL is installed with the PHP. So we do not need to install an extra library for Windows operating systems. We can install PHP cURL library for deb based distributions like Ubuntu, Debian, Mint, Kali like below.

$ sudo apt install php-curl
PHP cURL Library
PHP cURL Library

PHP cURL Usage Steps

In order to use cURL in PHP, we have to follow the following steps that are required to initialize, configure, execute and close a cURL session. Of course, we will provide some parameters and arguments to these functions in order to set the cURL behavior.

curl_init();      // initializes a cURL session
curl_setopt();    // changes the cURL session behavior with options
curl_exec();      // executes the started cURL session
curl_close();     // closes the cURL session and deletes the variable made by curl_init();

Initialize cURL Sessions

The first is to use or create PHP cURL sessions is using the curl_init() function which is used to initialize the cURL session. curl_init() function can be called without a parameter or with a URL parameter which will set the remote URL we can to use and communicate.

//Only create a cURL session and set to $ch variable
$ch = curl_init();

//Create a sessions variable named $ch 
//and initialize it for the "http://www.poftut.com" URL
$ch = curl_init("http://www.poftut.com/");

Set cURL Options

Setting cURL options is not mandatory where if no option is set the default option configuration will be used. In order to set cURL sessions options, we will provide the cURL session variable we have already initialized and the option we want to set. There are a lot of options to set. We can set these options one by one executing the curl_setopt() function.

curl_setopt(SESSION_VARIABLE, OPTION, OPTION_VALUE);
  • `SESSION_VARIABLE` is the variable that is initialized as a PHP cURL session.
  • `OPTION` is the option we want the set or change.
  • `OPTION_VALUE` is the value for the specified option.
$ch = curl_init();

//Set URL as "http://www.poftut.com"
curl_setopt($ch, CURLOPT_URL, "http://www.poftut.com/");

//Set HTTP Header 
curl_setopt($ch, CURLOPT_HEADER, Array("Content-Type: text/xml"));

//Return Page Contents
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

Execute cURL Request

The third step is executing the cURL request or session with the curl_exec() function where we will provide the cURL session variable as a parameter.

$ch = curl_init(); 

//Set URL as "http://www.poftut.com"
curl_setopt($ch, CURLOPT_URL, "http://www.poftut.com/");

//Execute curl with given options
curl_exec($ch);

Close cURL Session

The last step for a PHP cURL request is closing the session and releasing the resources. curl_close() is used to close and release all resources like memory, network, etc.

//Initialize cURL session
$ch = curl_init(); 


//Set URL as "http://www.poftut.com"
curl_setopt($ch, CURLOPT_URL, "http://www.poftut.com/"); 


//Execute curl with given options 
curl_exec($ch);


//Close the cURL session
curl_close($ch);

Get URL with cURL

Now we have learned basics of the PHP cURL usage. We will start examining the different types of examples. First, we will make an HTTP GET request to the google.com and print the request-response to the standard output or command line.

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://www.google.com');

curl_exec($ch);

curl_close($ch);
Get URL with cURL
Get URL with cURL

Return Page Contents To A Variable

Alternatively, we can put the returned response from the cURL request into a variable. We will use the CURLOPT_RETURNTRANSFER option and set this option value is 1.

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://www.google.com');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$contents = curl_exec($ch);

echo $contents;
Return Page Contents To A Variable
Return Page Contents To A Variable

Set User-Agent HTTP Header

We can also set the User-Agent header of the HTTP request by using CURLOPT_HEADER option with the "User-Agent: PofWeb" value. In this case, the user agent or browser name expressed as PofWeb.

$ch = curl_init(); 


//Set URL as "http://www.poftut.com" 
curl_setopt($ch, CURLOPT_URL, "http://www.poftut.com/"); 


//Set HTTP Header 
curl_setopt($ch, CURLOPT_HEADER, Array("User-Agent: PofWeb")); 


//Return Page Contents 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);


//Close cURL session
curl_close($ch);

Follow Redirects

Redirects are used to redirect the user to from requested URL into another URL. Redirects can be useful if the current URL does not provide historical resources. We can also make the PHP cURL to follow redirects by using CURLOPT_FOLLOWLOCATION options with the true.

// Follow redirects, if any
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);

Fail cURL If Response Is 400, 404

The HTTP protocol provides return or HTTP status codes in order to represent the request status. Codes like 4XX, 400, 404 are used to express different error about the processing of the request. If the current PHP cURL request is returned an error status code we can make the cURL fail and return some error code. We will use <span class="pln">CURLOPT_FAILONERROR option.

// Fail the cURL request if response code = 400 (like 404 errors) 
curl_setopt($curl, CURLOPT_FAILONERROR, true);

Wait For Specified Time For Connect

While connecting to the remote server there may be some delay which can be related to internet speed server speed etc. We can set some timeout in order to prevent waiting indefinitely. We will use CURLOPT_TIMEOUT option and provide the seconds for timeout which is 10 in this example. After 10 seconds the connection request will be stopped.

// Execute the cURL request for a maximum of 50 seconds
curl_setopt($curl, CURLOPT_TIMEOUT, 10);

Skip SSL Certificate Check

Today’s HTTP connections are very secure with the usage of the TCL/SSL certificates. TLS/SSL certificates are used to encrypt the connection and approved from certificate authorities for the usage of the different parties. The default behavior of PHP cURL is stopping request if the remote TLS/SSL certificate is not valid. We can prevent this and continue even the remote HTTP server TLS/SSL certificates are not valid. We will just set CURLOPT_SSL_VERIFYHOST and CURLOPT_SSL_VERIFYPEER options to false.

// Do not check the SSL certificates
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

Leave a Comment