Kotchasan Framework Documentation

Kotchasan Framework Documentation

Curl Class - การส่งคำขอ HTTP

TH 05 Feb 2026 07:47

Curl Class - การส่งคำขอ HTTP

คลาส Curl เป็นเครื่องมือสำหรับการส่งคำขอ HTTP โดยใช้ cURL ในกรอบงาน Kotchasan

namespace

Kotchasan\Curl;

คุณสมบัติ

คลาส Curl รองรับการส่งคำขอ HTTP ในรูปแบบต่างๆ รวมถึงการตั้งค่า authentication, proxy และการจัดการ header

คุณสมบัติสำคัญ

protected $error = 0;           // รหัสข้อผิดพลาด cURL (0 = ไม่มีข้อผิดพลาด)
protected $errorMessage = '';   // ข้อความข้อผิดพลาดจาก cURL
protected $headers = [];        // HTTP headers
protected $options = [];        // พารามิเตอร์ CURLOPT;

เมธอดหลัก

__construct()

สร้าง instance ของ Curl พร้อมการตั้งค่าเริ่มต้น

class ExampleClass {
    <?php
public function __construct();
}

Throws: Exception หาก cURL ไม่รองรับ

ตัวอย่างการใช้งาน:

use Kotchasan\Curl;

// สร้าง Curl instance
$curl = new Curl();

// ตัวอย่างการตรวจสอบการรองรับ cURL
try {
    $curl = new Curl();
    echo "cURL พร้อมใช้งาน";
} catch (Exception $e) {
    echo "ข้อผิดพลาด: " . $e->getMessage();
}

get()

ส่งคำขอ GET

class ExampleClass {
    <?php
public function get($url, $params = []): string;
}

Parameters:

  • $url - URL ปลายทาง
  • $params - พารามิเตอร์ (อาร์เรย์หรือสตริง)

Returns: Response body

ตัวอย่างการใช้งาน:

use Kotchasan\Curl;

$curl = new Curl();

// GET ธรรมดา
$response = $curl->get('https://api.example.com/users');
echo $response;

// GET พร้อมพารามิเตอร์
$params = [
    'page' => 1,
    'limit' => 10,
    'search' => 'john'
];
$response = $curl->get('https://api.example.com/users', $params);

// ตรวจสอบข้อผิดพลาด
if ($curl->error()) {
    echo 'เกิดข้อผิดพลาด: ' . $curl->errorMessage();
} else {
    echo 'สำเร็จ: ' . $response;
}

// ระบบดึงข้อมูล API
function fetchApiData($endpoint, $params = []) {
    $curl = new Curl();
    $response = $curl->get("https://api.myservice.com/{$endpoint}", $params);

    if ($curl->error()) {
        return [
            'success' => false,
            'error' => $curl->errorMessage()
        ];
    }

    return [
        'success' => true,
        'data' => json_decode($response, true)
    ];
}

// การใช้งาน
$result = fetchApiData('users', ['status' => 'active']);
if ($result['success']) {
    foreach ($result['data'] as $user) {
        echo "ผู้ใช้: {$user['name']}\n";
    }
}

post()

ส่งคำขอ POST

class ExampleClass {
    <?php
public function post($url, $params = []): string;
}

Parameters:

  • $url - URL ปลายทาง
  • $params - ข้อมูลที่จะส่ง (อาร์เรย์หรือสตริง)

Returns: Response body

ตัวอย่างการใช้งาน:

use Kotchasan\Curl;

$curl = new Curl();

// POST ข้อมูลอาร์เรย์
$data = [
    'name' => 'John Doe',
    'email' => 'john@example.com',
    'age' => 30
];
$response = $curl->post('https://api.example.com/users', $data);

// POST ข้อมูล JSON
$curl->setHeaders(['Content-Type' => 'application/json']);
$jsonData = json_encode($data);
$response = $curl->post('https://api.example.com/users', $jsonData);

// POST ข้อมูลฟอร์ม
$formData = [
    'username' => 'johndoe',
    'password' => 'secret123',
    'remember_me' => '1'
];
$response = $curl->post('https://api.example.com/login', $formData);

// ระบบส่งข้อมูลไป API
function sendDataToApi($endpoint, $data) {
    $curl = new Curl();
    $curl->setHeaders([
        'Content-Type' => 'application/json',
        'Authorization' => 'Bearer ' . API_TOKEN
    ]);

    $response = $curl->post("https://api.myservice.com/{$endpoint}", json_encode($data));

    if ($curl->error()) {
        return [
            'success' => false,
            'error' => $curl->errorMessage()
        ];
    }

    $result = json_decode($response, true);
    return [
        'success' => true,
        'data' => $result
    ];
}

// สร้างผู้ใช้ใหม่
$newUser = [
    'name' => 'Jane Smith',
    'email' => 'jane@example.com',
    'role' => 'user'
];

$result = sendDataToApi('users', $newUser);
if ($result['success']) {
    echo "สร้างผู้ใช้สำเร็จ ID: " . $result['data']['id'];
}

put()

ส่งคำขอ PUT

class ExampleClass {
    <?php
public function put($url, $params = []): string;
}

Parameters:

  • $url - URL ปลายทาง
  • $params - ข้อมูลที่จะส่ง

Returns: Response body

delete()

ส่งคำขอ DELETE

class ExampleClass {
    <?php
public function delete($url, $params): string;
}

Parameters:

  • $url - URL ปลายทาง
  • $params - ข้อมูลที่จะส่ง

Returns: Response body

ตัวอย่างการใช้งาน:

use Kotchasan\Curl;

$curl = new Curl();

// อัพเดทข้อมูลด้วย PUT
$updateData = [
    'name' => 'John Updated',
    'email' => 'john.updated@example.com'
];
$response = $curl->put('https://api.example.com/users/123', $updateData);

// ลบข้อมูลด้วย DELETE
$response = $curl->delete('https://api.example.com/users/123', []);

// ระบบ CRUD API
class ApiClient {
    private $curl;
    private $baseUrl;
    private $token;

    public function __construct($baseUrl, $token = null) {
        $this->curl = new Curl();
        $this->baseUrl = rtrim($baseUrl, '/');
        $this->token = $token;

        if ($token) {
            $this->curl->setHeaders([
                'Authorization' => 'Bearer ' . $token,
                'Content-Type' => 'application/json'
            ]);
        }
    }

    public function create($endpoint, $data) {
        $url = $this->baseUrl . '/' . ltrim($endpoint, '/');
        $response = $this->curl->post($url, json_encode($data));
        return $this->handleResponse($response);
    }

    public function read($endpoint, $params = []) {
        $url = $this->baseUrl . '/' . ltrim($endpoint, '/');
        $response = $this->curl->get($url, $params);
        return $this->handleResponse($response);
    }

    public function update($endpoint, $data) {
        $url = $this->baseUrl . '/' . ltrim($endpoint, '/');
        $response = $this->curl->put($url, json_encode($data));
        return $this->handleResponse($response);
    }

    public function delete($endpoint) {
        $url = $this->baseUrl . '/' . ltrim($endpoint, '/');
        $response = $this->curl->delete($url, '');
        return $this->handleResponse($response);
    }

    private function handleResponse($response) {
        if ($this->curl->error()) {
            return [
                'success' => false,
                'error' => $this->curl->errorMessage()
            ];
        }

        return [
            'success' => true,
            'data' => json_decode($response, true)
        ];
    }
}

// การใช้งาน ApiClient
$api = new ApiClient('https://api.example.com', 'your-api-token');

// สร้างผู้ใช้
$result = $api->create('users', ['name' => 'John', 'email' => 'john@example.com']);

// อ่านผู้ใช้
$result = $api->read('users/123');

// อัพเดทผู้ใช้
$result = $api->update('users/123', ['name' => 'John Updated']);

// ลบผู้ใช้
$result = $api->delete('users/123');

ส่งคำขอ HEAD

class ExampleClass {
    <?php
public function head($url, $params = []): string;
}

Parameters:

  • $url - URL ปลายทาง
  • $params - พารามิเตอร์

Returns: Response headers

ตัวอย่างการใช้งาน:

use Kotchasan\Curl;

$curl = new Curl();

// ตรวจสอบข้อมูล header อย่างเดียว
$response = $curl->head('https://api.example.com/users/123');

// ใช้ HEAD เพื่อตรวจสอบการมีอยู่ของไฟล์
function checkFileExists($url) {
    $curl = new Curl();
    $curl->head($url);

    return $curl->error() === 0;
}

if (checkFileExists('https://example.com/image.jpg')) {
    echo "ไฟล์มีอยู่";
} else {
    echo "ไฟล์ไม่พบ";
}

setHeaders()

ตั้งค่า HTTP headers

class ExampleClass {
    <?php
public function setHeaders($headers): $this;
}

Parameters:

  • $headers - อาร์เรย์ headers

Returns: $this สำหรับ method chaining

setOptions()

ตั้งค่า cURL options

class ExampleClass {
    <?php
public function setOptions($options): $this;
}

Parameters:

  • $options - อาร์เรย์ options

Returns: $this สำหรับ method chaining

ตัวอย่างการใช้งาน:

use Kotchasan\Curl;

$curl = new Curl();

// ตั้งค่า headers
$curl->setHeaders([
    'Content-Type' => 'application/json',
    'Authorization' => 'Bearer token123',
    'User-Agent' => 'MyApp/1.0',
    'Accept' => 'application/json'
]);

// ตั้งค่า cURL options
$curl->setOptions([
    CURLOPT_TIMEOUT => 60,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_MAXREDIRS => 5,
    CURLOPT_SSL_VERIFYPEER => false
]);

// Method chaining
$response = $curl
    ->setHeaders(['Content-Type' => 'application/json'])
    ->setOptions([CURLOPT_TIMEOUT => 30])
    ->get('https://api.example.com/data');

httpauth()

ตั้งค่า HTTP authentication

class ExampleClass {
    <?php
public function httpauth($username = '', $password = '', $type = 'any'): $this;
}

Parameters:

  • $username - ชื่อผู้ใช้
  • $password - รหัสผ่าน
  • $type - ประเภท authentication (any, digest, basic, etc.)

Returns: $this สำหรับ method chaining

httpproxy()

ใช้ PROXY

class ExampleClass {
    <?php
public function httpproxy($url = '', $port = 80, $username = null, $password = null): $this;
}

Parameters:

  • $url - URL ของ proxy
  • $port - พอร์ต
  • $username - ชื่อผู้ใช้ proxy (ไม่บังคับ)
  • $password - รหัสผ่าน proxy (ไม่บังคับ)

Returns: $this สำหรับ method chaining

ตัวอย่างการใช้งาน:

use Kotchasan\Curl;

$curl = new Curl();

// ใช้ Basic Authentication
$response = $curl
    ->httpauth('username', 'password', 'basic')
    ->get('https://api.example.com/secure-data');

// ใช้ Proxy
$response = $curl
    ->httpproxy('proxy.example.com', 8080, 'proxy_user', 'proxy_pass')
    ->get('https://api.example.com/data');

// ระบบเข้าถึง API ที่มีการรักษาความปลอดภัย
class SecureApiClient {
    private $curl;

    public function __construct($username, $password) {
        $this->curl = new Curl();
        $this->curl->httpauth($username, $password, 'basic');
    }

    public function getData($endpoint) {
        $response = $this->curl->get("https://secure-api.example.com/{$endpoint}");

        if ($this->curl->error()) {
            return null;
        }

        return json_decode($response, true);
    }
}

$secureApi = new SecureApiClient('api_user', 'api_password');
$data = $secureApi->getData('sensitive-data');

referer()

ตั้งค่า referer

class ExampleClass {
    <?php
public function referer($referrer): $this;
}

Parameters:

  • $referrer - URL referer

Returns: $this สำหรับ method chaining

setCookie()

ตั้งค่าไฟล์ cookie

class ExampleClass {
    <?php
public function setCookie($cookiePath): $this;
}

Parameters:

  • $cookiePath - ที่อยู่ไฟล์ cookie

Returns: $this สำหรับ method chaining

ตัวอย่างการใช้งาน:

use Kotchasan\Curl;

$curl = new Curl();

// ตั้งค่า referer
$curl->referer('https://example.com/previous-page');

// ใช้ cookie file
$cookieFile = ROOT_PATH . 'tmp/cookies.txt';
$curl->setCookie($cookieFile);

// ระบบล็อกอินและเก็บ session
function loginAndKeepSession($username, $password) {
    $curl = new Curl();
    $cookieFile = ROOT_PATH . 'tmp/session_cookies.txt';

    // ตั้งค่า cookie file
    $curl->setCookie($cookieFile);

    // ส่งข้อมูลล็อกอิน
    $loginData = [
        'username' => $username,
        'password' => $password
    ];

    $response = $curl->post('https://example.com/login', $loginData);

    if ($curl->error()) {
        return false;
    }

    // ตรวจสอบการล็อกอินสำเร็จ
    if (strpos($response, 'welcome') !== false) {
        return $cookieFile; // คืนค่าที่อยู่ cookie file
    }

    return false;
}

// เข้าถึงหน้าที่ต้องล็อกอิน
function accessProtectedPage($cookieFile, $url) {
    $curl = new Curl();
    $curl->setCookie($cookieFile);

    return $curl->get($url);
}

// การใช้งาน
$cookieFile = loginAndKeepSession('myuser', 'mypass');
if ($cookieFile) {
    $protectedContent = accessProtectedPage($cookieFile, 'https://example.com/dashboard');
    echo $protectedContent;
}

error()

ตรวจสอบรหัสข้อผิดพลาด cURL

class ExampleClass {
    <?php
public function error(): int;
}

Returns: รหัสข้อผิดพลาด (0 = ไม่มีข้อผิดพลาด)

errorMessage()

ดึงข้อความข้อผิดพลาดจาก cURL

class ExampleClass {
    <?php
public function errorMessage(): string;
}

Returns: ข้อความข้อผิดพลาด

ตัวอย่างการใช้งาน:

use Kotchasan\Curl;

$curl = new Curl();
$response = $curl->get('https://invalid-url.example.com');

if ($curl->error()) {
    echo "รหัสข้อผิดพลาด: " . $curl->error() . "\n";
    echo "ข้อความ: " . $curl->errorMessage() . "\n";
} else {
    echo "สำเร็จ: " . $response;
}

// ระบบจัดการข้อผิดพลาดแบบละเอียด
function handleCurlError($curl) {
    $errorCode = $curl->error();
    $errorMessage = $curl->errorMessage();

    $errorTypes = [
        CURLE_COULDNT_CONNECT => 'ไม่สามารถเชื่อมต่อได้',
        CURLE_OPERATION_TIMEOUTED => 'หมดเวลาการเชื่อมต่อ',
        CURLE_COULDNT_RESOLVE_HOST => 'ไม่พบโฮสต์',
        CURLE_SSL_CONNECT_ERROR => 'ข้อผิดพลาด SSL',
        CURLE_HTTP_NOT_FOUND => 'ไม่พบหน้า (404)'
    ];

    $friendlyMessage = $errorTypes[$errorCode] ?? 'ข้อผิดพลาดไม่ทราบสาเหตุ';

    return [
        'code' => $errorCode,
        'message' => $errorMessage,
        'friendly' => $friendlyMessage
    ];
}

ตัวอย่างการใช้งานขั้นสูง

use Kotchasan\Curl;

// ระบบ HTTP Client แบบครบชุด
class HttpClient {
    private $curl;
    private $baseUrl;
    private $defaultHeaders;
    private $timeout;

$timeout = 3; // 0) {
        $this->curl = new Curl();
        $this->baseUrl = rtrim($baseUrl, '/');
        $this->timeout = $timeout;
        $this->defaultHeaders = [
            'User-Agent' => 'HttpClient/1.0',
            'Accept' => 'application/json',
            'Content-Type' => 'application/json'
        ];

        $this->curl->setOptions([
            CURLOPT_TIMEOUT => $timeout,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_MAXREDIRS => 3
        ]);
    }

    public function setAuth($username, $password, $type = 'basic') {
        $this->curl->httpauth($username, $password, $type);
        return $this;
    }

    public function setHeaders($headers) {
        $this->defaultHeaders = array_merge($this->defaultHeaders, $headers);
        return $this;
    }

    public function get($endpoint, $params = []) {
        return $this->request('GET', $endpoint, $params);
    }

    public function post($endpoint, $data = []) {
        return $this->request('POST', $endpoint, $data);
    }

    public function put($endpoint, $data = []) {
        return $this->request('PUT', $endpoint, $data);
    }

    public function delete($endpoint) {
        return $this->request('DELETE', $endpoint);
    }

    private function request($method, $endpoint, $data = []) {
        $url = $this->baseUrl . '/' . ltrim($endpoint, '/');

        $this->curl->setHeaders($this->defaultHeaders);

        $startTime = microtime(true);

        switch (strtoupper($method)) {
            case 'GET':
                $response = $this->curl->get($url, $data);
                break;
            case 'POST':
                $response = $this->curl->post($url, is_array($data) ? json_encode($data) : $data);
                break;
            case 'PUT':
                $response = $this->curl->put($url, is_array($data) ? json_encode($data) : $data);
                break;
            case 'DELETE':
                $response = $this->curl->delete($url, '');
                break;
            default:
                throw new \InvalidArgumentException("Unsupported HTTP method: {$method}");
        }

        $endTime = microtime(true);
        $responseTime = round(($endTime - $startTime) * 1000, 2);

        return [
            'success' => !$this->curl->error(),
            'status_code' => $this->curl->error(),
            'error_message' => $this->curl->errorMessage(),
            'response' => $response,
            'response_time' => $responseTime . 'ms',
            'url' => $url,
            'method' => $method
        ];
    }
}

// ระบบ API Gateway
class ApiGateway {
    private $clients = [];

    public function addService($name, $baseUrl, $config = []) {
        $client = new HttpClient($baseUrl, $config['timeout'] ?? 30);

        if (isset($config['auth'])) {
            $client->setAuth($config['auth']['username'], $config['auth']['password']);
        }

        if (isset($config['headers'])) {
            $client->setHeaders($config['headers']);
        }

        $this->clients[$name] = $client;
        return $this;
    }

    public function call($service, $method, $endpoint, $data = []) {
        if (!isset($this->clients[$service])) {
            throw new \InvalidArgumentException("Service '{$service}' not found");
        }

        $client = $this->clients[$service];

        switch (strtolower($method)) {
            case 'get':
                return $client->get($endpoint, $data);
            case 'post':
                return $client->post($endpoint, $data);
            case 'put':
                return $client->put($endpoint, $data);
            case 'delete':
                return $client->delete($endpoint);
            default:
                throw new \InvalidArgumentException("Unsupported method: {$method}");
        }
    }
}

// การใช้งาน API Gateway
$gateway = new ApiGateway();

// เพิ่มบริการต่างๆ
$gateway->addService('users', 'https://user-api.example.com', [
    'timeout' => 30,
    'auth' => ['username' => 'api_user', 'password' => 'api_pass'],
    'headers' => ['X-API-Version' => 'v1']
]);

$gateway->addService('orders', 'https://order-api.example.com', [
    'timeout' => 60,
    'headers' => ['Authorization' => 'Bearer ' . ORDER_API_TOKEN]
]);

$gateway->addService('payments', 'https://payment-api.example.com', [
    'timeout' => 45,
    'headers' => ['X-API-Key' => PAYMENT_API_KEY]
]);

// เรียกใช้บริการ
$userResult = $gateway->call('users', 'get', 'users/123');
$orderResult = $gateway->call('orders', 'post', 'orders', [
    'user_id' => 123,
    'items' => [['product_id' => 1, 'quantity' => 2]]
]);

// ระบบ Webhook Handler
class WebhookHandler {
    private $curl;

    public function __construct() {
        $this->curl = new Curl();
        $this->curl->setOptions([
            CURLOPT_TIMEOUT => 10,
            CURLOPT_HTTPHEADER => ['Content-Type: application/json']
        ]);
    }

    public function sendWebhook($url, $data, $secret = null) {
        $payload = json_encode($data);

        $headers = ['Content-Type' => 'application/json'];

        if ($secret) {
            $signature = hash_hmac('sha256', $payload, $secret);
            $headers['X-Hub-Signature-256'] = 'sha256=' . $signature;
        }

        $this->curl->setHeaders($headers);

        $response = $this->curl->post($url, $payload);

        return [
            'success' => !$this->curl->error(),
            'error' => $this->curl->errorMessage(),
            'response' => $response
        ];
    }

    public function broadcast($urls, $data, $secret = null) {
        $results = [];

        foreach ($urls as $url) {
            $results[$url] = $this->sendWebhook($url, $data, $secret);
        }

        return $results;
    }
}

// การใช้งาน Webhook
$webhook = new WebhookHandler();

$eventData = [
    'event' => 'user.created',
    'data' => [
        'user_id' => 123,
        'email' => 'user@example.com',
        'created_at' => date('c')
    ]
];

$webhookUrls = [
    'https://service1.example.com/webhook',
    'https://service2.example.com/webhook',
    'https://service3.example.com/webhook'
];

$results = $webhook->broadcast($webhookUrls, $eventData, 'webhook_secret_key');

foreach ($results as $url => $result) {
    if ($result['success']) {
        echo "Webhook sent to {$url}: SUCCESS\n";
    } else {
        echo "Webhook failed for {$url}: {$result['error']}\n";
    }
}

หมายเหตุการใช้งาน

  1. การรองรับ: ต้องมี cURL extension ในระบบ
  2. ความปลอดภัย: รองรับ SSL/TLS และการยืนยันตัวตน
  3. Performance: มีการตั้งค่า timeout และ redirect limit
  4. ข้อผิดพลาด: ใช้ error() และ errorMessage() เพื่อตรวจสอบ
  5. Headers: สามารถกำหนด custom headers ได้

คลาส Curl เป็นเครื่องมือที่ทรงพลังสำหรับการส่งคำขอ HTTP ในกรอบงาน Kotchasan รองรับการเชื่อมต่อกับ API และบริการภายนอกต่างๆ อย่างมีประสิทธิภาพ