cURL PHP এর অনেক গুরুত্বপূর্ণ একটি অংশ, আমরা প্রায় প্রতিদিনই এটিকে ব্যবহার করে থাকি, cURL দিয়ে মোটামুটি সব ধরনের HTTP request পাঠানো যায়। cURL মূলত PHP এর একটি Library, সাধারণত সকল PHP installation সাথে cURL enable থাকে যদি enable না থাকে তাহলে সেটিকে php.ini থেকে enable করে নিতে হয়।

এই article টিতে আমি কিভাবে PHP cURL ব্যবহার করতে হয় এবং একটি ক্লাস তৈরি করার চেষ্টা করবো যেটি ব্যবহার করে PHP cURL কে আরও সহজ ভাবে ব্যবহার করা যাবে।

তাহলে চলুন শুরু করা যাক, প্রথমে আমি একটি ক্লাস তৈরি করি, নাম দিলাম setHTTPRequest এরপর আস্তে আস্তে সকল method ও property গুলু তৈরি করবো।

if(!class_exists('setHTTPRequest')){
class setHTTPRequest
{
	
}//End of class
}

এখন ক্লাসটির মধ্যে কিছু property এবং send নামে একটি method তৈরি করি।
curl_init() function টি ব্যবহার করা হয় cURL initialize করার জন্য যেটি দিয়েই মূল কাজ শুরু হয়।
curl_setopt() function টি ব্যবহার করা হয় cURL এ সকল ধরনের data এবং behavior set করার জন্য। এর দ্বিতীয় parameter টিতে PHP এর predefined কিছু constant বসে এবং তৃতীয় parameter টিতে ঐ constant অনুযায়ী value বসে।
curl_exec() function টি ব্যবহার করা হয় request টি পাঠানোর জন্য।
curl_getinfo() function টি ব্যবহার করা হয় last transferred request এর বিভিন্ন তথ্য জন্য।
curl_close() function টি ব্যবহার করা হয় initialize করা request টি বন্ধ করার জন্য।

protected $response;
protected $http_code;
protected $errno;
protected $error;
public $url;

public function send()
{
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $this->url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	
	$this->response = curl_exec($ch);
	$this->http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

	$this->errno = curl_errno($ch);
	$this->error = curl_error($ch);

	curl_close($ch);
}

curl_setopt সম্বন্ধে আরও জানতে curl_setopt PHP Manual টি দেখুন।
curl_getinfo সম্বন্ধে আরও জানতে curl_getinfo PHP Manual টি দেখুন।

এখন response, HTTP code এবং error পাওয়ার জন্য নতুন আরও তিনটি মেথড বানাই।

public function getResponse()
{
	return $this->response;
}

public function getHttpCode()
{
	return $this->http_code;
}

public function getErrors()
{
	return [
		'errno' => $this->errno,
		'error' => $this->error,
	];
}

এখন পর্যন্ত আমরা যতটুকু কাজ করলাম তা দিয়ে সাধারন GET request পাঠানো যাবে, চলুন একটি উদাহরণ দেয়া যাক।

require __DIR__ . '/setHTTPRequest.php'; 

$http = new setHTTPRequest;

$http->url = 'https://jsonplaceholder.typicode.com/users';

$http->send();
$response = $http->getResponse();
$http_code = $http->getHttpCode();
$errors = $http->getErrors();

এখন আপনি $response, $http_code এবং $errors এই variable গুলো থেকেই আপনার GET request এর data পেয়ে যাবেন, আর কোন variable কোন ধরনের data দিবে সেটা variable আর নাম থেকেই বুঝা যাচ্ছে।

এখন আমরা আরও কিছু option যুক্ত করবো, প্রথমেই redirect follow করার option add করি। আমরা চাইলে কয়টি ধাপ পর্যন্ত redirect follow করবে সেটিও set করে দিতে পারবো। এর জন্য send মেথডে নিচের দুইটি option যুক্ত করি।

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_MAXREDIRS, 3);

আমরা চাইলে কিছু common authentication cURL এর মাধ্যমে করতে পারি যেমনঃ Basic auth, Digest auth ইত্যাদি। এর জন্য এই option গুলো যুক্ত করতে হবে।

if($this->http_auth == true){
	curl_setopt($ch, CURLOPT_HTTPAUTH, $this->auth_method);
	curl_setopt($ch, CURLOPT_USERPWD, $this->username .":". $this->password);
}

এখন চলুন দেখি কিভাবে header set করবেন, এর জন্য নিচের option টি যুক্ত করি।

curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers);

এখন চলুন দেখি কিভাবে বিভিন্ন method যেমনঃ POST, DELETE সহ অনন্যা মেথডে request পাঠাবেন, এর জন্য নিচের option টি যুক্ত করি।

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $this->request_method);

if($this->request_method != 'GET'){
	curl_setopt($ch, CURLOPT_POSTFIELDS, $this->post_data);
}

এখন তাহলে চলুন একটি উদাহরণ দিয়ে এই লিখাটি শেষ করি।

require __DIR__ . '/setHTTPRequest.php'; 

$http = new setHTTPRequest;

$http->url = 'https://jsonplaceholder.typicode.com/posts';
$http->request_method = 'POST';

$data = [
	'userId' => 1,
	'title' => 'Excepturi optio reprehenderit',
	'body' => 'Cnsequuntur expedita et cum reprehenderit molestiae ut ut quas totam nostrum rerum est autem sunt rem eveniet archi.',
];
$http->post_data = json_encode($data);

$http->headers = [
	'Content-Type: application/json',                                                                                
	'Content-Length: ' . strlen($http->post_data)
];

$http->send();
$response = $http->getResponse();
$http_code = $http->getHttpCode();
$errors = $http->getErrors();

Source file download করুন GitHub gist থেকে।

আরও অধিক আকারে ধারনা নিতে অবশ্যই PHP Manual cURL Functions গুলো দেখবেন।

কোন ভুল হয়ে থাকলে অবশ্যই ধরিয়ে দিবেন।
কষ্ট করে পড়ার জন্য ধন্যবাদ।