以下是一個最簡單的 cURL POST 請求流程,包含初始化、設置選項、執行、關閉:
<?php
// 目標地址
$uri = 'https://www.example.com/api/receive.php';
// POST 數據
$data = array('name' => 'tanteng');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $uri);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回字符串而非直接輸出
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HEADER, false); // 不包含響應頭
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 超時秒數
$response = curl_exec($ch);
if ($response === false) {
throw new Exception('cURL Error: ' . curl_error($ch));
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo "HTTP Code: $httpCode\n";
echo "Response: $response\n";
<?php
if (isset($_POST['name']) && !empty($_POST['name'])) {
echo '您好,' . htmlspecialchars($_POST['name']) . '!';
} else {
http_response_code(400);
echo '缺少必要參數 name';
}
| 選項 | 說明 |
|---|---|
| CURLOPT_POST | 啟用 POST 模式 |
| CURLOPT_POSTFIELDS | 傳遞陣列自動編碼為 multipart/form-data;傳字符串則為 application/x-www-form-urlencoded |
| CURLOPT_RETURNTRANSFER | true 時 curl_exec 返回響應體字符串 |
| CURLOPT_SSL_VERIFYPEER | HTTPS 請求時建議設為 false(開發環境)或提供 CA 證書路徑 |
| CURLOPT_TIMEOUT | 最大執行秒數,防止掛起 |
$jsonData = json_encode(['name' => 'tanteng', 'age' => 25]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonData)
]);
iconv 轉換。CURLOPT_SSL_VERIFYPEER => false 或配置 CURLOPT_CAINFO。