cURL 的關鍵在於 CURLOPT_RETURNTRANSFER 選項:
curl_exec() 回傳內容字串(方便後續處理)<?php
$url = "https://www.baidu.com";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$content = curl_exec($ch);
if (curl_errno($ch)) {
die("cURL 錯誤: " . curl_error($ch));
}
echo "HTTP 狀態碼: " . curl_getinfo($ch, CURLINFO_HTTP_CODE) . "\n";
echo "內容長度: " . strlen($content) . " 字元\n";
// 這裡可進行 DOM 解析、正則擷取等後續處理
curl_close($ch);
?>
<?php
$url = "https://httpbin.org/post"; // 測試用端點
$postData = [
'username' => 'testuser',
'password' => 'secret123',
'action' => 'login'
];
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($postData), // application/x-www-form-urlencoded
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_TIMEOUT => 15,
CURLOPT_HTTPHEADER => [
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Referer: https://example.com/login'
]
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo "狀態碼: $httpCode\n";
echo "回應: $response\n";
?>
<?php
$url = "https://api.example.com/upload";
$filePath = "/path/to/local/image.jpg";
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
'file' => new CURLFile($filePath, 'image/jpeg', 'upload.jpg'),
'folder' => 'images'
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_TIMEOUT => 30
]);
$response = curl_exec($ch);
curl_close($ch);
var_dump(json_decode($response, true));
?>
注意: PHP 5.5+ 必須使用CURLFile類別,舊版@/path/to/file語法已棄用且不安全。
<?php
$cookieFile = sys_get_temp_dir() . '/curl_cookie_' . md5('example.com') . '.txt';
// --- 步驟 1:登入取得 Cookie ---
$loginUrl = "https://example.com/login";
$loginData = ['user' => 'demo', 'pass' => 'demo123'];
$ch = curl_init($loginUrl);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($loginData),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_COOKIEJAR => $cookieFile, // 儲存 Cookie
CURLOPT_COOKIEFILE => $cookieFile, // 讀取 Cookie
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_TIMEOUT => 15
]);
curl_exec($ch);
curl_close($ch);
// --- 步驟 2:攜帶 Cookie 訪問受保護頁面 ---
$protectedUrl = "https://example.com/dashboard";
$ch = curl_init($protectedUrl);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_COOKIEFILE => $cookieFile, // 只需讀取
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_TIMEOUT => 10
]);
$dashboard = curl_exec($ch);
curl_close($ch);
echo "儀表板內容長度: " . strlen($dashboard);
?>
<?php
$apiUrl = "https://api.example.com/v1/users";
$payload = json_encode(['name' => 'John', 'email' => 'john@example.com']);
$token = "Bearer YOUR_ACCESS_TOKEN";
$ch = curl_init($apiUrl);
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST", // 或 PUT/PATCH/DELETE
CURLOPT_POSTFIELDS => $payload,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Content-Length: ' . strlen($payload),
'Authorization: ' . $token
],
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_TIMEOUT => 10
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode >= 200 && $httpCode < 300) {
$data = json_decode($response, true);
print_r($data);
} else {
echo "API 錯誤 ($httpCode): $response";
}
?>
CURLOPT_VERBOSE => true 並設定 CURLOPT_STDERR => fopen('curl_debug.log', 'w') 記錄完整溝通細節curl_getinfo($ch) 取得連線時間、DNS 解析時間、下載速度等效能指標CURLOPT_CAINFO