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

PHP cURL 選項完整參考手冊:分類詳解與實務應用

     編輯:PHP 相關知識

cURL 是 PHP 最強大的 HTTP 客戶端庫,選項超過 200 個。本文將所有選項按資料類型分為四大類,並標註常用與進階選項。

第一類:布林值選項 (TRUE/FALSE)

選項用途備註
CURLOPT_AUTOREFERER重定向時自動設定 Referer爬蟲必備
CURLOPT_BINARYTRANSFER配合 RETURNTRANSFER 回傳原始資料下載檔案用
CURLOPT_COOKIESESSION僅傳送 session cookie忽略持久 cookie
CURLOPT_CRLFUnix 換行轉 CRLFWindows 相容
CURLOPT_DNS_USE_GLOBAL_CACHE啟用全域 DNS 快取預設開啟、線程安全
CURLOPT_FAILONERRORHTTP 錯誤碼 ≥ 400 時失敗預設忽略錯誤
CURLOPT_FILETIME嘗試取得遠端檔案時間透過 CURLINFO_FILETIME 取得
CURLOPT_FOLLOWLOCATION自動追蹤 Location 重定向配合 MAXREDIRS 限制層數
CURLOPT_FORBID_REUSE完成後強制斷開連線不重用連線
CURLOPT_FRESH_CONNECT強制建立新連線忽略快取連線
CURLOPT_FTP_USE_EPRTFTP 使用 EPRT/LPRT 指令FALSE 則用 PORT
CURLOPT_FTP_USE_EPSVFTP 優先嘗試 EPSV被動模式前置
CURLOPT_FTPAPPENDFTP 附加模式寫入非覆蓋
CURLOPT_FTPASCIIFTP ASCII 模式傳輸TRANSFERTEXT 別名
CURLOPT_FTPLISTONLY僅列出 FTP 目錄名稱不下載內容
CURLOPT_HEADER輸出包含 HTTP 標頭除錯常用
CURLINFO_HEADER_OUT追蹤請求字串PHP 5.1.3+
CURLOPT_HTTPGET強制使用 GET 方法預設即為 GET
CURLOPT_HTTPPROXYTUNNEL透過 HTTP Proxy 傳輸隧道模式
CURLOPT_MUTE重設所有參數為預設值已棄用
CURLOPT_NETRC從 ~/.netrc 讀取帳密自動登入
CURLOPT_NOBODY不輸出 Body (HEAD 請求)檢查資源是否存在
CURLOPT_NOPROGRESS關閉進度條預設 TRUE,僅除錯改 FALSE
CURLOPT_NOSIGNAL忽略信號 (多執行緒必開)cURL 7.10+
CURLOPT_POST發送 POST 請求application/x-www-form-urlencoded
CURLOPT_PUTHTTP PUT 上傳檔案需設 INFILE/INFILESIZE
CURLOPT_RETURNTRANSFER回傳字串而非直接輸出最常用選項
CURLOPT_SSL_VERIFYPEER驗證 SSL 憑證生產環境必開,配合 CAINFO
CURLOPT_TRANSFERTEXTFTP/ASCII 模式Windows 需設
CURLOPT_UNRESTRICTED_AUTH重定向時保持認證資訊跨域也送帳密
CURLOPT_UPLOAD啟用檔案上傳配合 INFILE
CURLOPT_VERBOSE輸出詳細除錯資訊寫入 STDERR 或 CURLOPT_STDERR

第二類:整數值選項

選項用途備註
CURLOPT_BUFFERSIZE讀取緩衝區大小不保證填滿,cURL 7.10+
CURLOPT_CLOSEPOLICY連線關閉策略LEAST_RECENTLY_USED 或 OLDEST
CURLOPT_CONNECTTIMEOUT連線逾時秒數0 為無限等待
CURLOPT_CONNECTTIMEOUT_MS連線逾時毫秒數cURL 7.16.2+、PHP 5.2.3+
CURLOPT_DNS_CACHE_TIMEOUTDNS 快取壽命 (秒)預設 120 秒
CURLOPT_FTPSSLAUTHFTP SSL 認證方式SSL/TLS/DEFAULT
CURLOPT_HTTP_VERSIONHTTP 版本NONE/1.0/1.1
CURLOPT_HTTPAUTHHTTP 認證方法BASIC/DIGEST/GSSNEGOTIATE/NTLM/ANY/ANYSAFE,可用 | 組合
CURLOPT_INFILESIZE上傳檔案大小限制 (bytes)
CURLOPT_LOW_SPEED_LIMIT低速門檻 (bytes/sec)配合 LOW_SPEED_TIME 判斷中斷
CURLOPT_LOW_SPEED_TIME低速持續時間 (秒)超過此秒數中斷
CURLOPT_MAXCONNECTS最大連線數超過依 CLOSEPOLICY 關閉
CURLOPT_MAXREDIRS最大重定向次數配合 FOLLOWLOCATION
CURLOPT_PORT指定連接埠可選
CURLOPT_PROTOCOLS允許的協定位元遮罩HTTP/HTTPS/FTP/FTPS/SCP/SFTP/TELNET/LDAP/DICT/FILE/TFTP/ALL,cURL 7.19.4+
CURLOPT_PROXYAUTHProxy 認證方式僅 BASIC/NTLM,cURL 7.10.7+
CURLOPT_PROXYPORTProxy 連接埠也可在 PROXY 中指定
CURLOPT_PROXYTYPEProxy 類型HTTP (預設) / SOCKS5,cURL 7.10+
CURLOPT_REDIR_PROTOCOLS重定向允許的協定預設除 FILE/SCP 外全開,cURL 7.19.4+
CURLOPT_RESUME_FROM續傳位元組偏移量斷點續傳用
CURLOPT_SSL_VERIFYHOST驗證 SSL Common Name1=檢查存在、2=檢查匹配主機名
CURLOPT_SSLVERSIONSSL 版本2/3,通常自動偵測
CURLOPT_TIMECONDITION時間條件模式IFMODSINCE/IFUNMODSINCE
CURLOPT_TIMEOUT總執行逾時秒數整個請求上限
CURLOPT_TIMEOUT_MS總執行逾時毫秒數cURL 7.16.2+、PHP 5.2.3+
CURLOPT_TIMEVALUE時間條件的時間戳配合 TIMECONDITION

第三類:字串值選項

選項用途備註
CURLOPT_CAINFOCA 憑證檔案路徑配合 SSL_VERIFYPEER
CURLOPT_CAPATHCA 憑證目錄配合 SSL_VERIFYPEER
CURLOPT_COOKIE手動設定 Cookie 標頭格式:name=value; name2=value2
CURLOPT_COOKIEFILE讀取 Cookie 的檔案Netscape 格式或 HTTP 標頭
CURLOPT_COOKIEJAR儲存 Cookie 的檔案連線結束後寫入
CURLOPT_CUSTOMREQUEST自訂 HTTP 方法GET/POST/PUT/DELETE/CONNECT 等,勿輸入完整請求行
CURLOPT_EGDSOCKETEGD Socket 路徑類似 RANDOM_FILE
CURLOPT_ENCODINGAccept-Encoding 標頭identity/deflate/gzip,空字串=全支援
CURLOPT_FTPPORTFTP PORT 指令 IPIP/主機名/介面名/- (預設)
CURLOPT_INTERFACE外送網路介面介面名/IP/主機名
CURLOPT_KRB4LEVELKerberos 4 安全等級clear/safe/confidential/private
CURLOPT_POSTFIELDSPOST 資料內容字串或陣列,陣列自動變 multipart/form-data,檔案加 @ 前綴
CURLOPT_PROXYHTTP Proxy 位址host:port
CURLOPT_PROXYUSERPWDProxy 帳密username:password
CURLOPT_RANDOM_FILESSL 隨機種子檔案
CURLOPT_RANGE範圍請求X-Y 格式,支援多段 X-Y,N-M
CURLOPT_REFERERReferer 標頭
CURLOPT_SSL_CIPHER_LISTSSL 加密套件清單如 RC4-SHA、TLSv1
CURLOPT_SSLCERTPEM 格式客戶端憑證
CURLOPT_SSLCERTPASSWD客戶端憑證密碼
CURLOPT_SSLCERTTYPE憑證類型PEM (預設)/DER/ENG,cURL 7.9.3+
CURLOPT_SSLENGINESSL 私鑰加密引擎
CURLOPT_SSLENGINE_DEFAULT非對稱加密引擎
CURLOPT_SSLKEYSSL 私鑰檔案
CURLOPT_SSLKEYPASSWD私鑰密碼敏感資訊,注意腳本安全
CURLOPT_SSLKEYTYPE私鑰類型PEM/DER/ENG
CURLOPT_URL請求目標 URL也可在 curl_init() 指定
CURLOPT_USERAGENTUser-Agent 標頭
CURLOPT_USERPWDHTTP 認證帳密username:password

第四類:陣列值選項

選項用途格式範例
CURLOPT_HTTP200ALIASES視為成功的 HTTP 200 代碼陣列array(200, 201, 204)
CURLOPT_HTTPHEADER自訂 HTTP 標頭陣列array('Content-type: text/plain', 'Content-length: 100')
CURLOPT_POSTQUOTEFTP 執行後的指令陣列array('DELE file.txt')
CURLOPT_QUOTEFTP 執行前的指令陣列array('TYPE I')

資源型別選項 (Stream Resource)

選項用途
CURLOPT_FILE輸出寫入檔案 (預設 STDOUT)
CURLOPT_INFILE上傳讀取檔案
CURLOPT_STDERR錯誤輸出位置 (預設 STDERR)
CURLOPT_WRITEHEADER標頭寫入檔案

回呼函式選項

選項回呼簽名用途
CURLOPT_HEADERFUNCTIONfn($ch, $header) : int處理回應標頭,回傳已寫入位元組數
CURLOPT_PASSWDFUNCTIONfn($ch, $prompt, $maxlen) : string提供密碼
CURLOPT_PROGRESSFUNCTIONfn($ch, $dltotal, $dlnow, $ultotal, $ulnow) : int進度回呼,回傳非 0 中斷
CURLOPT_READFUNCTIONfn($ch, $fd, $length) : string讀取上傳資料,回傳資料,空字串=EOF
CURLOPT_WRITEFUNCTIONfn($ch, $data) : int處理回應資料,回傳已寫入位元組數

常用組合範例

// 標準 GET 請求
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => 'https://api.example.com/data',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
    CURLOPT_CONNECTTIMEOUT => 5,
    CURLOPT_SSL_VERIFYPEER => true,
    CURLOPT_SSL_VERIFYHOST => 2,
    CURLOPT_USERAGENT => 'MyApp/1.0',
]);
$response = curl_exec($ch);
curl_close($ch);

// POST JSON 資料
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => 'https://api.example.com/submit',
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode($data),
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Authorization: Bearer ' . $token,
    ],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
]);
$response = curl_exec($ch);
curl_close($ch);

// 檔案上傳 (PHP 5.5+ 建議使用 CURLFile)
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => 'https://api.example.com/upload',
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => [
        'file' => new CURLFile('/path/to/file.jpg', 'image/jpeg', 'filename.jpg'),
        'field2' => 'value',
    ],
    CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
curl_close($ch);

錯誤處理最佳實踐

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FAILONERROR, true); // 4xx/5xx 觸發錯誤

$response = curl_exec($ch);
$errno = curl_errno($ch);
$error = curl_error($ch);
$info = curl_getinfo($ch);
curl_close($ch);

if ($errno) {
    // 網路層錯誤:連線失敗、逾時、DNS 解析失敗等
    throw new Exception("cURL Error [$errno]: $error");
}

$httpCode = $info['http_code'];
if ($httpCode >= 400) {
    // 應用層錯誤
    throw new Exception("HTTP Error $httpCode: $response");
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved