首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP cURL 實作 GET、POST、Cookie 完整教學:含自動/自訂 Cookie 處理

     編輯:PHP 綜合知識

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_RETURNTRANSFERtrue 回傳字串,false 直接輸出
CURLOPT_FOLLOWLOCATION自動追蹤 Location 重導向
CURLOPT_COOKIEJAR儲存 Cookie 檔案路徑
CURLOPT_COOKIEFILE讀取 Cookie 檔案路徑
CURLOPT_USERAGENT設定 User-Agent
CURLOPT_REFERER設定 Referer
CURLOPT_TIMEOUT連線逾時秒數
CURLOPT_SSL_VERIFYPEERfalse 忽略 SSL 憑證驗證
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved