1. GET 請求實作
<?php
$ch = curl_init("https://www.domain.com/api/index.php?test=1");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 回傳字串而非直接輸出
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); // 二進位傳輸
$output = curl_exec($ch);
// 寫入檔案
$fh = fopen("out.html", 'w');
fwrite($fh, $output);
fclose($fh);
curl_close($ch);
?>
2. POST 請求實作
<?php
$url = 'https://www.domain.com/api/';
$fields = array(
'lname' => 'justcoding',
'fname' => 'phplover',
'title' => 'myapi',
'age' => '27',
'email' => '1353777303@gmail.com',
'phone' => '1353777303'
);
// ⚠ 重要:POST 欄位需為字串格式 "key1=val1&key2=val2"
// $post_data = implode('&', $fields); // 錯誤寫法
$post_data = http_build_query($fields); // 正確寫法
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 自動追蹤重導向
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
3. Cookie 處理:兩種模式
模式一:自動 Cookie 管理 (需兩次請求)
<?php
// 第一次請求:取得並儲存 Cookie
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // 儲存 Cookie
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch);
curl_close($ch);
// 第二次請求:攜帶 Cookie
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); // 讀取 Cookie
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
?>
模式二:自訂 Cookie 標頭
<?php
$header = array(
'Accept: text/html,*/*',
'Accept-Language: zh-cn',
'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',
'Host: ' . $target_host,
'Connection: Keep-Alive',
'Cookie: ' . $your_cookie_string
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
?>
完整範例:偽裝瀏覽器、處理編碼、Cookie 持久化
<?php
function get_curl_content($url, $referer) {
$cookie_jar = tempnam('./tmp', 'JSESSIONID');
// 第一階段:建立 Cookie
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
curl_exec($ch);
curl_close($ch);
// 第二階段:使用 Cookie
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$content = curl_exec($ch);
// 自動偵測編碼轉換
preg_match_all("/charset=(.+?)[\"\']/is", $content, $matches);
if (strtolower($matches[1][0]) == "utf-8") {
$content = iconv('utf-8', 'gb18030//IGNORE', $content);
}
curl_close($ch);
@unlink($cookie_jar); // 清理暫存檔
return $content;
}
?>
常用 cURL 選項速查
| 選項 | 說明 |
| CURLOPT_RETURNTRANSFER | true 回傳字串,false 直接輸出 |
| CURLOPT_FOLLOWLOCATION | 自動追蹤 Location 重導向 |
| CURLOPT_COOKIEJAR | 儲存 Cookie 檔案路徑 |
| CURLOPT_COOKIEFILE | 讀取 Cookie 檔案路徑 |
| CURLOPT_USERAGENT | 設定 User-Agent |
| CURLOPT_REFERER | 設定 Referer |
| CURLOPT_TIMEOUT | 連線逾時秒數 |
| CURLOPT_SSL_VERIFYPEER | false 忽略 SSL 憑證驗證 |