একটি PHP script-এর প্রায়ই অন্য একটি service-এর সাথে কথা বলা দরকার — একটি payment provider, একটি weather API, একটি third-party service-এর data। cURL সেই বাইরে যাওয়া HTTP request করার PHP-র built-in উপায়।
$ch = curl_init('https://api.example.com/users');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);| Option | কী করে |
|---|---|
| CURLOPT_RETURNTRANSFER | সরাসরি print করার বদলে response-কে একটি string হিসেবে return করে |
| CURLOPT_POST | GET-এর বদলে request POST হিসেবে পাঠায় |
| CURLOPT_POSTFIELDS | একটি POST request-এ পাঠানোর data |
| CURLOPT_HTTPHEADER | Content-Type বা Authorization-এর মতো custom header-এর একটি array |
| CURLOPT_TIMEOUT | ছেড়ে দেওয়ার আগে সর্বোচ্চ কত সেকেন্ড অপেক্ষা করবে |
$payload = json_encode(['name' => 'Sam', 'email' => 'sam@example.com']);
$ch = curl_init('https://api.example.com/users');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer ' . $apiToken,
]);
$response = curl_exec($ch);
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);একটি network failure — একটি timeout, একটি DNS error — একটি খারাপ HTTP status code থেকে আলাদাভাবে check করা দরকার।
if (curl_errno($ch)) {
echo 'cURL error: ' . curl_error($ch);
} elseif ($statusCode !== 200) {
echo "Request failed with status $statusCode";
}আসল project-এর জন্য Guzzle
Guzzle package (আগের lesson থেকে Composer দিয়ে install করা) cURL-কে অনেক বেশি বন্ধুত্বপূর্ণ একটি API-তে wrap করে আর একটি আসল project-এর জন্য standard পছন্দ — raw cURL এখনো বোঝার যোগ্য কারণ Guzzle নিজেই ভেতরে এটা ব্যবহার করে।