curl_setopt
(PHP 4 >= 4.0.2, PHP 5, PHP 7)
curl_setopt — 設置 cURL 傳輸選項
bool curl_setopt ( resource $ch , int $option , mixed $value )
為 cURL 會話句柄設置選項。
1 <?php 2 $submit_url = "https://sitename/process.php"; 3 4 $curl = curl_init(); 5 6 curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC ) ; 7 curl_setopt($curl, CURLOPT_USERPWD, "username:password"); 8 curl_setopt($curl, CURLOPT_SSLVERSION,3); 9 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 10 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); 11 curl_setopt($curl, CURLOPT_HEADER, true); 12 curl_setopt($curl, CURLOPT_POST, true); 13 curl_setopt($curl, CURLOPT_POSTFIELDS, $params ); 14 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 15 curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); 16 curl_setopt($curl, CURLOPT_URL, $submit_url); 17 18 $data = split("text/html", curl_exec($curl) ); 19 $temp = split("\r\n", $data[1]) ; 20 21 $result = unserialize( $temp[2] ) ; 22 23 print_r($result); 24 curl_close($curl); 25 ?>
通過提交郵件到HTTPS站點(例如支付網關)提交信息的地方,HTTPS頁面在提交信息之前需要基本的身份驗證。上面的代碼會很有幫助。
如果你想連接到“……”,然后想使用POST數據,這就是方法:
1 <?php 2 $curl = curl_init(); 3 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 4 curl_setopt($curl, CURLOPT_HEADER, 0); 5 curl_setopt($curl, CURLOPT_POST, true); 6 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 7 curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); 8 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 9 curl_setopt($curl, CURLOPT_COOKIEFILE, "cookiefile"); 10 curl_setopt($curl, CURLOPT_COOKIEJAR, "cookiefile"); # SAME cookiefile 11 curl_setopt($curl, CURLOPT_URL, "url1"); # this is where you first time connect - GET method authorization in my case, if you have POST - need to edit code a bit 12 $xxx = curl_exec($curl); 13 14 curl_setopt($curl, CURLOPT_URL, "url2"); # this is where you are requesting POST-method form results (working with secure connection using cookies after auth) 15 curl_setopt($curl, CURLOPT_POSTFIELDS, "var1=value&var2=value&var3=value&"); # form params that'll be used to get form results 16 $xxx = curl_exec($curl); 17 18 curl_close ($curl); 19 echo $xxx; 20 ?>
當指定文件或curlopt_cookiefile或curlopt_cookiejar你可能需要使用完整的文件路徑而不是相對路徑。
Example #1 初始化一個新的cURL會話並獲取一個網頁
1 <?php 2 // 創建一個新cURL資源 3 $ch = curl_init(); 4 5 // 設置URL和相應的選項 6 curl_setopt($ch, CURLOPT_URL, "http://www.example.com/"); 7 curl_setopt($ch, CURLOPT_HEADER, false); 8 9 // 抓取URL並把它傳遞給瀏覽器 10 curl_exec($ch); 11 12 //關閉cURL資源,並且釋放系統資源 13 curl_close($ch); 14 ?>
Example #2 上傳文件 (PHP 5.5.0 后被廢棄)
1 <?php 2 3 /* http://localhost/upload.php: 4 print_r($_POST); 5 print_r($_FILES); 6 */ 7 8 $ch = curl_init(); 9 10 $data = array('name' => 'Foo', 'file' => '@/home/user/test.png'); 11 12 curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php'); 13 curl_setopt($ch, CURLOPT_POST, 1); 14 curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); // PHP 5.6.0 后必須開啟 15 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 16 17 curl_exec($ch); 18 ?>
以上例程會輸出:
1 Array 2 ( 3 [name] => Foo 4 ) 5 Array 6 ( 7 [file] => Array 8 ( 9 [name] => test.png 10 [type] => image/png 11 [tmp_name] => /tmp/phpcpjNeQ 12 [error] => 0 13 [size] => 279 14 ) 15 16 )
Note:
傳遞一個數組到CURLOPT_POSTFIELDS
,cURL會把數據編碼成 multipart/form-data,而然傳遞一個URL-encoded字符串時,數據會被編碼成 application/x-www-form-urlencoded。
在PHP5中,對於 “curlopt_postfields” 選項,我們可以使用:
1 <?php 2 $ch = curl_init($URI); 3 $Post = http_build_query($PostData); 4 curl_setopt($ch, CURLOPT_POSTFIELDS, $Post); 5 $Output = curl_exec($ch); 6 curl_close($ch); 7 ?>
-
以下
option
參數的value
應該被設置成 bool 類型:選項 將 value
設置為備注 CURLOPT_AUTOREFERER
TRUE
時將根據 Location: 重定向時,自動設置 header 中的Referer:信息。CURLOPT_BINARYTRANSFER
設為 TRUE
,將在啟用CURLOPT_RETURNTRANSFER
時,返回原生的(Raw)輸出。從 PHP 5.1.3 開始,此選項不再有效果:使用 CURLOPT_RETURNTRANSFER
后總是會返回原生的(Raw)內容。CURLOPT_COOKIESESSION
設為 TRUE
時將開啟新的一次 cookie 會話。它將強制 libcurl 忽略之前會話時存的其他 cookie。 libcurl 在默認狀況下無論是否為會話,都會儲存、加載所有 cookie。會話 cookie 是指沒有過期時間,只存活在會話之中。CURLOPT_CERTINFO
TRUE
將在安全傳輸時輸出 SSL 證書信息到 STDERR。在 cURL 7.19.1 中添加。 PHP 5.3.2 后有效。 需要開啟 CURLOPT_VERBOSE
才有效。CURLOPT_CONNECT_ONLY
TRUE
將讓庫執行所有需要的代理、驗證、連接過程,但不傳輸數據。此選項用於 HTTP、SMTP 和 POP3。在 7.15.2 中添加。 PHP 5.5.0 起有效。 CURLOPT_CRLF
啟用時將Unix的換行符轉換成回車換行符。 CURLOPT_DNS_USE_GLOBAL_CACHE
TRUE
會啟用一個全局的DNS緩存。此選項非線程安全的,默認已開啟。CURLOPT_FAILONERROR
當 HTTP 狀態碼大於等於 400, TRUE
將將顯示錯誤詳情。 默認情況下將返回頁面,忽略 HTTP 代碼。CURLOPT_SSL_FALSESTART
TRUE
開啟 TLS False Start (一種 TLS 握手優化方式)cURL 7.42.0 中添加。自 PHP 7.0.7 起有效。 CURLOPT_FILETIME
TRUE
時,會嘗試獲取遠程文檔中的修改時間信息。 信息可通過curl_getinfo()函數的CURLINFO_FILETIME
選項獲取。CURLOPT_FOLLOWLOCATION
TRUE
時將會根據服務器返回 HTTP 頭中的 "Location: " 重定向。(注意:這是遞歸的,"Location: " 發送幾次就重定向幾次,除非設置了CURLOPT_MAXREDIRS
,限制最大重定向次數。)。CURLOPT_FORBID_REUSE
TRUE
在完成交互以后強制明確的斷開連接,不能在連接池中重用。CURLOPT_FRESH_CONNECT
TRUE
強制獲取一個新的連接,而不是緩存中的連接。CURLOPT_FTP_USE_EPRT
TRUE
時,當 FTP 下載時,使用 EPRT (和 LPRT)命令。 設置為FALSE
時禁用 EPRT 和 LPRT,僅僅使用PORT 命令。CURLOPT_FTP_USE_EPSV
TRUE
時,在FTP傳輸過程中,回到 PASV 模式前,先嘗試 EPSV 命令。設置為FALSE
時禁用 EPSV。CURLOPT_FTP_CREATE_MISSING_DIRS
TRUE
時,當 ftp 操作不存在的目錄時將創建它。CURLOPT_FTPAPPEND
TRUE
為追加寫入文件,而不是覆蓋。CURLOPT_TCP_NODELAY
TRUE
時禁用 TCP 的 Nagle 算法,就是減少網絡上的小包數量。PHP 5.2.1 有效,編譯時需要 libcurl 7.11.2 及以上。 CURLOPT_FTPASCII
CURLOPT_TRANSFERTEXT
的別名。CURLOPT_FTPLISTONLY
TRUE
時只列出 FTP 目錄的名字。CURLOPT_HEADER
啟用時會將頭文件的信息作為數據流輸出。 CURLINFO_HEADER_OUT
TRUE
時追蹤句柄的請求字符串。從 PHP 5.1.3 開始可用。 CURLINFO_
的前綴是有意的(intentional)。CURLOPT_HTTPGET
TRUE
時會設置 HTTP 的 method 為 GET,由於默認是 GET,所以只有 method 被修改時才需要這個選項。CURLOPT_HTTPPROXYTUNNEL
TRUE
會通過指定的 HTTP 代理來傳輸。CURLOPT_MUTE
TRUE
時將完全靜默,無論是何 cURL 函數。在 cURL 7.15.5 中移出(可以使用 CURLOPT_RETURNTRANSFER 作為代替) CURLOPT_NETRC
TRUE
時,在連接建立時,訪問~/.netrc文件獲取用戶名和密碼來連接遠程站點。CURLOPT_NOBODY
TRUE
時將不輸出 BODY 部分。同時 Mehtod 變成了 HEAD。修改為FALSE
時不會變成 GET。CURLOPT_NOPROGRESS
TRUE
時關閉 cURL 的傳輸進度。Note:
PHP 默認自動設置此選項為
TRUE
,只有為了調試才需要改變設置。CURLOPT_NOSIGNAL
TRUE
時忽略所有的 cURL 傳遞給 PHP 進行的信號。在 SAPI 多線程傳輸時此項被默認啟用,所以超時選項仍能使用。cURL 7.10時被加入。 CURLOPT_PATH_AS_IS
TRUE
不處理 dot dot sequences (即 ../ )cURL 7.42.0 時被加入。 PHP 7.0.7 起有效。 CURLOPT_PIPEWAIT
TRUE
則等待 pipelining/multiplexing。cURL 7.43.0 時被加入。 PHP 7.0.7 起有效。 CURLOPT_POST
TRUE
時會發送 POST 請求,類型為:application/x-www-form-urlencoded,是 HTML 表單提交時最常見的一種。CURLOPT_PUT
TRUE
時允許 HTTP 發送文件。要被 PUT 的文件必須在CURLOPT_INFILE
和CURLOPT_INFILESIZE
中設置。CURLOPT_RETURNTRANSFER
TRUE
將curl_exec()獲取的信息以字符串返回,而不是直接輸出。CURLOPT_SAFE_UPLOAD
TRUE
禁用 @ 前綴在CURLOPT_POSTFIELDS
中發送文件。 意味着 @ 可以在字段中安全得使用了。 可使用 CURLFile 作為上傳的代替。PHP 5.5.0 中添加,默認值 FALSE
。 PHP 5.6.0 改默認值為TRUE
。. PHP 7 刪除了此選項, 必須使用 CURLFile interface 來上傳文件。CURLOPT_SASL_IR
TRUE
開啟,收到首包(first packet)后發送初始的響應(initial response)。cURL 7.31.10 中添加,自 PHP 7.0.7 起有效。 CURLOPT_SSL_ENABLE_ALPN
FALSE
禁用 SSL 握手中的 ALPN (如果 SSL 后端的 libcurl 內建支持) 用於協商到 http2。cURL 7.36.0 中增加, PHP 7.0.7 起有效。 CURLOPT_SSL_ENABLE_NPN
FALSE
禁用 SSL 握手中的 NPN(如果 SSL 后端的 libcurl 內建支持),用於協商到 http2。cURL 7.36.0 中增加, PHP 7.0.7 起有效。 CURLOPT_SSL_VERIFYPEER
FALSE
禁止 cURL 驗證對等證書(peer's certificate)。要驗證的交換證書可以在CURLOPT_CAINFO
選項中設置,或在CURLOPT_CAPATH
中設置證書目錄。自cURL 7.10開始默認為 TRUE
。從 cURL 7.10開始默認綁定安裝。CURLOPT_SSL_VERIFYSTATUS
TRUE
驗證證書狀態。cURL 7.41.0 中添加, PHP 7.0.7 起有效。 CURLOPT_TCP_FASTOPEN
TRUE
開啟 TCP Fast Open。cURL 7.49.0 中添加, PHP 7.0.7 起有效。 CURLOPT_TFTP_NO_OPTIONS
TRUE
不發送 TFTP 的 options 請求。自 cURL 7.48.0 添加, PHP 7.0.7 起有效。 CURLOPT_TRANSFERTEXT
TRUE
對 FTP 傳輸使用 ASCII 模式。對於LDAP,它檢索純文本信息而非 HTML。在 Windows 系統上,系統不會把 STDOUT 設置成二進制 模式。CURLOPT_UNRESTRICTED_AUTH
TRUE
在使用CURLOPT_FOLLOWLOCATION
重定向 header 中的多個 location 時繼續發送用戶名和密碼信息,哪怕主機名已改變。CURLOPT_UPLOAD
TRUE
准備上傳。CURLOPT_VERBOSE
TRUE
會輸出所有的信息,寫入到STDERR,或在CURLOPT_STDERR
中指定的文件。以下
option
的value
應該被設置成 integer:選項 設置 value
為備注 CURLOPT_BUFFERSIZE
每次讀入的緩沖的尺寸。當然不保證每次都會完全填滿這個尺寸。 在cURL 7.10中被加入。 CURLOPT_CLOSEPOLICY
CURLCLOSEPOLICY_*
中的一個。Note:
此選項已被廢棄,它不會被實現,永遠不會有效果啦。
PHP 5.6.0 中移除。 CURLOPT_CONNECTTIMEOUT
在嘗試連接時等待的秒數。設置為0,則無限等待。 CURLOPT_CONNECTTIMEOUT_MS
嘗試連接等待的時間,以毫秒為單位。設置為0,則無限等待。 如果 libcurl 編譯時使用系統標准的名稱解析器( standard system name resolver),那部分的連接仍舊使用以秒計的超時解決方案,最小超時時間還是一秒鍾。 在 cURL 7.16.2 中被加入。從 PHP 5.2.3 開始可用。 CURLOPT_DNS_CACHE_TIMEOUT
設置在內存中緩存 DNS 的時間,默認為120秒(兩分鍾)。 CURLOPT_EXPECT_100_TIMEOUT_MS
超時預計: 100毫秒內的 continue 響應 默認為 1000 毫秒。 cURL 7.36.0 中添加,自 PHP 7.0.7 有效。 CURLOPT_FTPSSLAUTH
FTP驗證方式(啟用的時候):CURLFTPAUTH_SSL (首先嘗試SSL),CURLFTPAUTH_TLS (首先嘗試TLS)或CURLFTPAUTH_DEFAULT (讓cURL 自個兒決定)。 在 cURL 7.12.2 中被加入。 CURLOPT_HEADEROPT
How to deal with headers. One of the following constants: CURLHEADER_UNIFIED
: the headers specified inCURLOPT_HTTPHEADER
will be used in requests both to servers and proxies. With this option enabled,CURLOPT_PROXYHEADER
will not have any effect.CURLHEADER_SEPARATE
: makesCURLOPT_HTTPHEADER
headers only get sent to a server and not to a proxy. Proxy headers must be set withCURLOPT_PROXYHEADER
to get used. Note that if a non-CONNECT request is sent to a proxy, libcurl will send both server headers and proxy headers. When doing CONNECT, libcurl will sendCURLOPT_PROXYHEADER
headers only to the proxy and thenCURLOPT_HTTPHEADER
headers only to the server. Defaults toCURLHEADER_SEPARATE
as of cURL 7.42.1, andCURLHEADER_UNIFIED
before.Added in cURL 7.37.0. Available since PHP 7.0.7. CURLOPT_HTTP_VERSION
CURL_HTTP_VERSION_NONE
(默認值,讓 cURL 自己判斷使用哪個版本),CURL_HTTP_VERSION_1_0
(強制使用 HTTP/1.0)或CURL_HTTP_VERSION_1_1
(強制使用 HTTP/1.1)。CURLOPT_HTTPAUTH
使用的 HTTP 驗證方法。選項有:
CURLAUTH_BASIC
、CURLAUTH_DIGEST
、CURLAUTH_GSSNEGOTIATE
、CURLAUTH_NTLM
、CURLAUTH_ANY
和CURLAUTH_ANYSAFE
。可以使用 | 位域(OR)操作符結合多個值,cURL 會讓服務器選擇受支持的方法,並選擇最好的那個。
CURLAUTH_ANY
是 CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM 的別名。CURLAUTH_ANYSAFE
是 CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM 的別名。CURLOPT_INFILESIZE
希望傳給遠程站點的文件尺寸,字節(byte)為單位。 注意無法用這個選項阻止 libcurl 發送更多的數據,確切發送什么取決於 CURLOPT_READFUNCTION
。CURLOPT_LOW_SPEED_LIMIT
傳輸速度,每秒字節(bytes)數,根據 CURLOPT_LOW_SPEED_TIME
秒數統計是否因太慢而取消傳輸。CURLOPT_LOW_SPEED_TIME
當傳輸速度小於 CURLOPT_LOW_SPEED_LIMIT
時(bytes/sec),PHP會判斷是否因太慢而取消傳輸。CURLOPT_MAXCONNECTS
允許的最大連接數量。達到限制時,會通過 CURLOPT_CLOSEPOLICY
決定應該關閉哪些連接。CURLOPT_MAXREDIRS
指定最多的 HTTP 重定向次數,這個選項是和 CURLOPT_FOLLOWLOCATION
一起使用的。CURLOPT_PORT
用來指定連接端口。 CURLOPT_POSTREDIR
位掩碼, 1 (301 永久重定向), 2 (302 Found) 和 4 (303 See Other) 設置 CURLOPT_FOLLOWLOCATION
時,什么情況下需要再次 HTTP POST 到重定向網址。cURL 7.19.1 中添加,PHP 5.3.2 開始可用。 CURLOPT_PROTOCOLS
CURLPROTO_*
的位掩碼。 啟用時,會限制 libcurl 在傳輸過程中可使用哪些協議。 這將允許你在編譯libcurl時支持眾多協議,但是限制只用允許的子集。默認 libcurl 將使用所有支持的協議。 參見CURLOPT_REDIR_PROTOCOLS
。可用的協議選項為:
CURLPROTO_HTTP
、CURLPROTO_HTTPS
、CURLPROTO_FTP
、CURLPROTO_FTPS
、CURLPROTO_SCP
、CURLPROTO_SFTP
、CURLPROTO_TELNET
、CURLPROTO_LDAP
、CURLPROTO_LDAPS
、CURLPROTO_DICT
、CURLPROTO_FILE
、CURLPROTO_TFTP
、CURLPROTO_ALL
。在 cURL 7.19.4 中被加入。 CURLOPT_PROXYAUTH
HTTP 代理連接的驗證方式。使用在 CURLOPT_HTTPAUTH
中的位掩碼。 當前僅僅支持CURLAUTH_BASIC
和CURLAUTH_NTLM
。在 cURL 7.10.7 中被加入。 CURLOPT_PROXYPORT
代理服務器的端口。端口也可以在 CURLOPT_PROXY
中設置。CURLOPT_PROXYTYPE
可以是 CURLPROXY_HTTP
(默認值)CURLPROXY_SOCKS4
、CURLPROXY_SOCKS5
、CURLPROXY_SOCKS4A
或CURLPROXY_SOCKS5_HOSTNAME
。在 cURL 7.10 中被加入。 CURLOPT_REDIR_PROTOCOLS
CURLPROTO_*
值的位掩碼。如果被啟用,位掩碼會限制 libcurl 在CURLOPT_FOLLOWLOCATION
開啟時,使用的協議。 默認允許除 FILE 和 SCP 外所有協議。 這和 7.19.4 前的版本無條件支持所有支持的協議不同。關於協議常量,請參照CURLOPT_PROTOCOLS
。在 cURL 7.19.4 中被加入。 CURLOPT_RESUME_FROM
在恢復傳輸時,傳遞字節為單位的偏移量(用來斷點續傳)。 CURLOPT_SSL_OPTIONS
Set SSL behavior options, which is a bitmask of any of the following constants: CURLSSLOPT_ALLOW_BEAST
: do not attempt to use any workarounds for a security flaw in the SSL3 and TLS1.0 protocols.CURLSSLOPT_NO_REVOKE
: disable certificate revocation checks for those SSL backends where such behavior is present.Added in cURL 7.25.0. Available since PHP 7.0.7. CURLOPT_SSL_VERIFYHOST
設置為 1 是檢查服務器SSL證書中是否存在一個公用名(common name)。譯者注:公用名(Common Name)一般來講就是填寫你將要申請SSL證書的域名 (domain)或子域名(sub domain)。 設置成 2,會檢查公用名是否存在,並且是否與提供的主機名匹配。 0 為不檢查名稱。 在生產環境中,這個值應該是 2(默認值)。 值 1 的支持在 cURL 7.28.1 中被刪除了。 CURLOPT_SSLVERSION
CURL_SSLVERSION_DEFAULT
(0),CURL_SSLVERSION_TLSv1
(1),CURL_SSLVERSION_SSLv2
(2),CURL_SSLVERSION_SSLv3
(3),CURL_SSLVERSION_TLSv1_0
(4),CURL_SSLVERSION_TLSv1_1
(5) ,CURL_SSLVERSION_TLSv1_2
(6) 中的其中一個。Note:
你最好別設置這個值,讓它使用默認值。 設置為 2 或 3 比較危險,在 SSLv2 和 SSLv3 中有弱點存在。
CURLOPT_STREAM_WEIGHT
設置 stream weight 數值 ( 1 和 256 之間的數字). cURL 7.46.0 中添加,自 PHP 7.0.7 起有效。 CURLOPT_TIMECONDITION
設置如何對待 CURLOPT_TIMEVALUE
。 使用CURL_TIMECOND_IFMODSINCE
,僅在頁面CURLOPT_TIMEVALUE
之后修改,才返回頁面。沒有修改則返回 "304 Not Modified" 頭,假設設置了CURLOPT_HEADER
為TRUE
。CURL_TIMECOND_IFUNMODSINCE
則起相反的效果。 默認為CURL_TIMECOND_IFMODSINCE
。CURLOPT_TIMEOUT
允許 cURL 函數執行的最長秒數。 CURLOPT_TIMEOUT_MS
設置cURL允許執行的最長毫秒數。 如果 libcurl 編譯時使用系統標准的名稱解析器( standard system name resolver),那部分的連接仍舊使用以秒計的超時解決方案,最小超時時間還是一秒鍾。 在 cURL 7.16.2 中被加入。從 PHP 5.2.3 起可使用。 CURLOPT_TIMEVALUE
秒數,從 1970年1月1日開始。這個時間會被 CURLOPT_TIMECONDITION
使。默認使用CURL_TIMECOND_IFMODSINCE
。CURLOPT_MAX_RECV_SPEED_LARGE
如果下載速度超過了此速度(以每秒字節數來統計) ,即傳輸過程中累計的平均數,傳輸就會降速到這個參數的值。默認不限速。 cURL 7.15.5 中添加, PHP 5.4.0 有效。 CURLOPT_MAX_SEND_SPEED_LARGE
如果上傳的速度超過了此速度(以每秒字節數來統計),即傳輸過程中累計的平均數 ,傳輸就會降速到這個參數的值。默認不限速。 cURL 7.15.5 中添加, PHP 5.4.0 有效。 CURLOPT_SSH_AUTH_TYPES
A bitmask consisting of one or more of CURLSSH_AUTH_PUBLICKEY
,CURLSSH_AUTH_PASSWORD
,CURLSSH_AUTH_HOST
,CURLSSH_AUTH_KEYBOARD
. Set toCURLSSH_AUTH_ANY
to let libcurl pick one.cURL 7.16.1 中添加。 CURLOPT_IPRESOLVE
允許程序選擇想要解析的 IP 地址類別。只有在地址有多種 ip 類別的時候才能用,可以的值有: CURL_IPRESOLVE_WHATEVER
、CURL_IPRESOLVE_V4
、CURL_IPRESOLVE_V6
,默認是CURL_IPRESOLVE_WHATEVER
。cURL 7.10.8 中添加。 CURLOPT_FTP_FILEMETHOD
告訴 curl 使用哪種方式來獲取 FTP(s) 服務器上的文件。可能的值有: CURLFTPMETHOD_MULTICWD
、CURLFTPMETHOD_NOCWD
和CURLFTPMETHOD_SINGLECWD
。cURL 7.15.1 中添加, PHP 5.3.0 起有效。 對於下面的這些
option
,value
應該被設置成 string:選項 設置的 value
備注 CURLOPT_CAINFO
一個保存着1個或多個用來讓服務端驗證的證書的文件名。這個參數僅僅在和 CURLOPT_SSL_VERIFYPEER
一起使用時才有意義。 .可能需要絕對路徑。 CURLOPT_CAPATH
一個保存着多個CA證書的目錄。這個選項是和 CURLOPT_SSL_VERIFYPEER
一起使用的。CURLOPT_COOKIE
設定 HTTP 請求中"Cookie: "部分的內容。多個 cookie 用分號分隔,分號后帶一個空格(例如, "fruit=apple; colour=red")。 CURLOPT_COOKIEFILE
包含 cookie 數據的文件名,cookie 文件的格式可以是 Netscape 格式,或者只是純 HTTP 頭部風格,存入文件。如果文件名是空的,不會加載 cookie,但 cookie 的處理仍舊啟用。 CURLOPT_COOKIEJAR
連接結束后,比如,調用 curl_close 后,保存 cookie 信息的文件。 CURLOPT_CUSTOMREQUEST
HTTP 請求時,使用自定義的 Method 來代替"GET"或"HEAD"。對 "DELETE" 或者其他更隱蔽的 HTTP 請求有用。 有效值如 "GET","POST","CONNECT"等等;也就是說,不要在這里輸入整行 HTTP 請求。例如輸入"GET /index.html HTTP/1.0\r\n\r\n"是不正確的。
Note:
不確定服務器支持這個自定義方法則不要使用它。
CURLOPT_DEFAULT_PROTOCOL
URL不帶協議的時候,使用的默認協議。
cURL 7.45.0 中添加,自 PHP 7.0.7 起有效。 CURLOPT_DNS_INTERFACE
Set the name of the network interface that the DNS resolver should bind to. This must be an interface name (not an address).
Added in cURL 7.33.0. Available since PHP 7.0.7. CURLOPT_DNS_LOCAL_IP4
Set the local IPv4 address that the resolver should bind to. The argument should contain a single numerical IPv4 address as a string.
Added in cURL 7.33.0. Available since PHP 7.0.7. CURLOPT_DNS_LOCAL_IP6
Set the local IPv6 address that the resolver should bind to. The argument should contain a single numerical IPv6 address as a string.
Added in cURL 7.33.0. Available since PHP 7.0.7. CURLOPT_EGDSOCKET
類似 CURLOPT_RANDOM_FILE
,除了一個Entropy Gathering Daemon套接字。CURLOPT_ENCODING
HTTP請求頭中"Accept-Encoding: "的值。 這使得能夠解碼響應的內容。 支持的編碼有"identity","deflate"和"gzip"。如果為空字符串"",會發送所有支持的編碼類型。 在 cURL 7.10 中被加入。 CURLOPT_FTPPORT
這個值將被用來獲取供FTP"PORT"指令所需要的IP地址。 "PORT" 指令告訴遠程服務器連接到我們指定的IP地址。這個字符串可以是純文本的IP地址、主機名、一個網絡接口名(UNIX下)或者只是一個'-'來使用默認的 IP 地址。 CURLOPT_INTERFACE
發送的網絡接口(interface),可以是一個接口名、IP 地址或者是一個主機名。 CURLOPT_KEYPASSWD
使用 CURLOPT_SSLKEY
或CURLOPT_SSH_PRIVATE_KEYFILE
私鑰時候的密碼。在 cURL 7.16.1 中添加。 CURLOPT_KRB4LEVEL
KRB4 (Kerberos 4) 安全級別。下面的任何值都是有效的(從低到高的順序):"clear"、"safe"、"confidential"、"private".。如果字符串以上這些,將使用"private"。 這個選項設置為 NULL
時將禁用 KRB4 安全認證。目前 KRB4 安全認證只能用於 FTP 傳輸。CURLOPT_LOGIN_OPTIONS
Can be used to set protocol specific login options, such as the preferred authentication mechanism via "AUTH=NTLM" or "AUTH=*", and should be used in conjunction with the CURLOPT_USERNAME
option.Added in cURL 7.34.0. Available since PHP 7.0.7. CURLOPT_PINNEDPUBLICKEY
Set the pinned public key. The string can be the file name of your pinned public key. The file format expected is "PEM" or "DER". The string can also be any number of base64 encoded sha256 hashes preceded by "sha256//" and separated by ";". Added in cURL 7.39.0. Available since PHP 7.0.7. CURLOPT_POSTFIELDS
全部數據使用HTTP協議中的 "POST" 操作來發送。 要發送文件,在文件名前面加上@前綴並使用完整路徑。 文件類型可在文件名后以 ';type=mimetype' 的格式指定。 這個參數可以是 urlencoded 后的字符串,類似'para1=val1¶2=val2&...',也可以使用一個以字段名為鍵值,字段數據為值的數組。 如果 value
是一個數組,Content-Type頭將會被設置成multipart/form-data。 從 PHP 5.2.0 開始,使用 @ 前綴傳遞文件時,value
必須是個數組。 從 PHP 5.5.0 開始, @ 前綴已被廢棄,文件可通過 CURLFile 發送。 設置CURLOPT_SAFE_UPLOAD
為TRUE
可禁用 @ 前綴發送文件,以增加安全性。CURLOPT_PRIVATE
Any data that should be associated with this cURL handle. This data can subsequently be retrieved with the CURLINFO_PRIVATE
option of curl_getinfo(). cURL does nothing with this data. When using a cURL multi handle, this private data is typically a unique key to identify a standard cURL handle.Added in cURL 7.10.3. CURLOPT_PROXY
HTTP 代理通道。 CURLOPT_PROXY_SERVICE_NAME
代理驗證服務的名稱。 cURL 7.34.0 中添加,PHP 7.0.7 起有效。 CURLOPT_PROXYUSERPWD
一個用來連接到代理的"[username]:[password]"格式的字符串。 CURLOPT_RANDOM_FILE
一個被用來生成 SSL 隨機數種子的文件名。 CURLOPT_RANGE
以"X-Y"的形式,其中X和Y都是可選項獲取數據的范圍,以字節計。HTTP傳輸線程也支持幾個這樣的重復項中間用逗號分隔如"X-Y,N-M"。 CURLOPT_REFERER
在HTTP請求頭中"Referer: "的內容。 CURLOPT_SERVICE_NAME
驗證服務的名稱 cURL 7.43.0 起添加,自 PHP 7.0.7 有效。 CURLOPT_SSH_HOST_PUBLIC_KEY_MD5
包含 32 位長的 16 進制數值。這個字符串應該是遠程主機公鑰(public key) 的 MD5 校驗值。在不匹配的時候 libcurl 會拒絕連接。 此選項僅用於 SCP 和 SFTP 的傳輸。 cURL 7.17.1 中添加。 CURLOPT_SSH_PUBLIC_KEYFILE
The file name for your public key. If not used, libcurl defaults to $HOME/.ssh/id_dsa.pub if the HOME environment variable is set, and just "id_dsa.pub" in the current directory if HOME is not set. Added in cURL 7.16.1. CURLOPT_SSH_PRIVATE_KEYFILE
The file name for your private key. If not used, libcurl defaults to $HOME/.ssh/id_dsa if the HOME environment variable is set, and just "id_dsa" in the current directory if HOME is not set. If the file is password-protected, set the password with CURLOPT_KEYPASSWD
.Added in cURL 7.16.1. CURLOPT_SSL_CIPHER_LIST
一個SSL的加密算法列表。例如RC4-SHA和TLSv1都是可用的加密列表。 CURLOPT_SSLCERT
一個包含 PEM 格式證書的文件名。 CURLOPT_SSLCERTPASSWD
使用 CURLOPT_SSLCERT
證書需要的密碼。CURLOPT_SSLCERTTYPE
證書的類型。支持的格式有"PEM" (默認值), "DER"和"ENG"。 在 cURL 7.9.3中 被加入。 CURLOPT_SSLENGINE
用來在 CURLOPT_SSLKEY
中指定的SSL私鑰的加密引擎變量。CURLOPT_SSLENGINE_DEFAULT
用來做非對稱加密操作的變量。 CURLOPT_SSLKEY
包含 SSL 私鑰的文件名。 CURLOPT_SSLKEYPASSWD
在
CURLOPT_SSLKEY
中指定了的SSL私鑰的密碼。Note:
由於這個選項包含了敏感的密碼信息,記得保證這個PHP腳本的安全。
CURLOPT_SSLKEYTYPE
CURLOPT_SSLKEY
中規定的私鑰的加密類型,支持的密鑰類型為"PEM"(默認值)、"DER"和"ENG"。CURLOPT_UNIX_SOCKET_PATH
使用 Unix 套接字作為連接,並用指定的 string 作為路徑。 cURL 7.40.0 中添加, PHP 7.0.7 起有效。 CURLOPT_URL
需要獲取的 URL 地址,也可以在curl_init() 初始化會話的時候。 CURLOPT_USERAGENT
在HTTP請求中包含一個"User-Agent: "頭的字符串。 CURLOPT_USERNAME
驗證中使用的用戶名。 cURL 7.19.1 中添加,PHP 5.5.0 起有效。 CURLOPT_USERPWD
傳遞一個連接中需要的用戶名和密碼,格式為:"[username]:[password]"。 CURLOPT_XOAUTH2_BEARER
指定 OAuth 2.0 access token。 cURL 7.33.0 中添加,自 PHP 7.0.7 添加。 以下
option
,value
應該被設置成數組:選項 可選 value
值備注 CURLOPT_CONNECT_TO
連接到指定的主機和端口,替換 URL 中的主機和端口。接受指定字符串格式的數組: HOST:PORT:CONNECT-TO-HOST:CONNECT-TO-PORT。 cURL 7.49.0 中添加, PHP 7.0.7 起有效。 CURLOPT_HTTP200ALIASES
HTTP 200 響應碼數組,數組中的響應碼被認為是正確的響應,而非錯誤。 在 cURL 7.10.3 中被加入。 CURLOPT_HTTPHEADER
設置 HTTP 頭字段的數組。格式: array('Content-type: text/plain', 'Content-length: 100')
CURLOPT_POSTQUOTE
在 FTP 請求執行完成后,在服務器上執行的一組array格式的 FTP 命令。 CURLOPT_PROXYHEADER
傳給代理的自定義 HTTP 頭。 cURL 7.37.0 中添加,自 PHP 7.0.7 添加。 CURLOPT_QUOTE
一組先於 FTP 請求的在服務器上執行的FTP命令。 CURLOPT_RESOLVE
提供自定義地址,指定了主機和端口。 包含主機、端口和 ip 地址的字符串,組成 array 的,每個元素以冒號分隔。格式: array("example.com:80:127.0.0.1")
在 cURL 7.21.3 中添加,自 PHP 5.5.0 起可用。 以下
option
,value
應該被設置成流資源 (例如使用fopen()):選項 可選 value
值CURLOPT_FILE
設置輸出文件,默認為STDOUT (瀏覽器)。 CURLOPT_INFILE
上傳文件時需要讀取的文件。 CURLOPT_STDERR
錯誤輸出的地址,取代默認的STDERR。 CURLOPT_WRITEHEADER
設置 header 部分內容的寫入的文件地址。 以下
option
的value
應該是有效的函數或者閉包:選項 value
值CURLOPT_HEADERFUNCTION
設置一個回調函數,這個函數有兩個參數,第一個是cURL的資源句柄,第二個是輸出的 header 數據。header數據的輸出必須依賴這個函數,返回已寫入的數據大小。 CURLOPT_PASSWDFUNCTION
設置一個回調函數,有三個參數,第一個是cURL的資源句柄,第二個是一個密碼提示符,第三個參數是密碼長度允許的最大值。返回密碼的值。 CURLOPT_PROGRESSFUNCTION
設置一個回調函數,有五個參數,第一個是cURL的資源句柄,第二個是預計要下載的總字節(bytes)數。第三個是目前下載的字節數,第四個是預計傳輸中總上傳字節數,第五個是目前上傳的字節數。
Note:
只有設置
CURLOPT_NOPROGRESS
選項為FALSE
時才會調用這個回調函數。返回非零值將中斷傳輸。 傳輸將設置
CURLE_ABORTED_BY_CALLBACK
錯誤。CURLOPT_READFUNCTION
回調函數名。該函數應接受三個參數。第一個是 cURL resource;第二個是通過選項 CURLOPT_INFILE
傳給 cURL 的 stream resource;第三個參數是最大可以讀取的數據的數量。回 調函數必須返回一個字符串,長度小於或等於請求的數據量(第三個參數)。一般從傳入的 stream resource 讀取。返回空字符串作為 EOF(文件結束) 信號。CURLOPT_WRITEFUNCTION
回調函數名。該函數應接受兩個參數。第一個是 cURL resource;第二個是要寫入的數據字符串。數 據必須在函數中被保存。 函數必須准確返回寫入數據的字節數,否則傳輸會被一個錯誤所中 斷。 其他值:
Option 設置 value
為CURLOPT_SHARE
curl_share_init() 返回的結果。 使 cURL 可以處理共享句柄里的數據。
返回值
成功時返回 TRUE
, 或者在失敗時返回 FALSE
。
更新日志
版本 | 說明 |
---|---|
7.0.7 | 引入 CURL_HTTP_VERSION_2 、 CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE 、 CURL_HTTP_VERSION_2TLS 、 CURL_REDIR_POST_301 、 CURL_REDIR_POST_302 、 CURL_REDIR_POST_303 、 CURL_REDIR_POST_ALL 、 CURL_VERSION_KERBEROS5 、 CURL_VERSION_PSL 、 CURL_VERSION_UNIX_SOCKETS 、 CURLAUTH_NEGOTIATE 、 CURLAUTH_NTLM_WB 、 CURLFTP_CREATE_DIR 、 CURLFTP_CREATE_DIR_NONE 、 CURLFTP_CREATE_DIR_RETRY 、 CURLHEADER_SEPARATE 、 CURLHEADER_UNIFIED 、 CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE 、CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE 、 CURLMOPT_MAX_HOST_CONNECTIONS 、CURLMOPT_MAX_PIPELINE_LENGTH 、 CURLMOPT_MAX_TOTAL_CONNECTIONS 、 CURLOPT_CONNECT_TO 、 CURLOPT_DEFAULT_PROTOCOL 、 CURLOPT_DNS_INTERFACE 、 CURLOPT_DNS_LOCAL_IP4 、CURLOPT_DNS_LOCAL_IP6 、 CURLOPT_EXPECT_100_TIMEOUT_MS 、 CURLOPT_HEADEROPT 、 CURLOPT_LOGIN_OPTIONS 、 CURLOPT_PATH_AS_IS 、 CURLOPT_PINNEDPUBLICKEY 、 CURLOPT_PIPEWAIT 、 CURLOPT_PROXY_SERVICE_NAME 、 CURLOPT_PROXYHEADER 、 CURLOPT_SASL_IR 、 CURLOPT_SERVICE_NAME 、 CURLOPT_SSL_ENABLE_ALPN 、 CURLOPT_SSL_ENABLE_NPN 、 CURLOPT_SSL_FALSESTART 、CURLOPT_SSL_VERIFYSTATUS 、 CURLOPT_STREAM_WEIGHT 、 CURLOPT_TCP_FASTOPEN 、 CURLOPT_TFTP_NO_OPTIONS 、 CURLOPT_UNIX_SOCKET_PATH 、 CURLOPT_XOAUTH2_BEARER 、 CURLPROTO_SMB 、 CURLPROTO_SMBS 、 CURLPROXY_HTTP_1_0 、 CURLSSH_AUTH_AGENT 和 CURLSSLOPT_NO_REVOKE 。 |
7.0.0 | 禁用 CURLOPT_SAFE_UPLOAD 的選項已被刪掉了。 所有的 curl 文件的上傳都必須使用 CURLFile。 |
5.6.0 | 默認 CURLOPT_SAFE_UPLOAD 為 TRUE 。 |
5.6.0 | 移出 CURLOPT_CLOSEPOLICY 和相關的值。 |
5.5.0 | 添加 cURL 資源作為 CURLOPT_PROGRESSFUNCTION 回調函數的第一個參數。 |
5.5.0 | 引入 CURLOPT_SHARE 。 |
5.3.0 | 引入 CURLOPT_PROGRESSFUNCTION 。 |
5.2.10 | 引入 CURLOPT_PROTOCOLS , and CURLOPT_REDIR_PROTOCOLS . |
5.2.4 | 引入了 CURLOPT_PRIVATE 。 |
5.1.0 | 引入 CURLOPT_AUTOREFERER , CURLOPT_BINARYTRANSFER , CURLOPT_FTPSSLAUTH , CURLOPT_PROXYAUTH , andCURLOPT_TIMECONDITION . |
5.0.0 | 引入 CURLOPT_FTP_USE_EPRT , CURLOPT_NOSIGNAL , CURLOPT_UNRESTRICTED_AUTH , CURLOPT_BUFFERSIZE ,CURLOPT_HTTPAUTH , CURLOPT_PROXYPORT , CURLOPT_PROXYTYPE , CURLOPT_SSLCERTTYPE , andCURLOPT_HTTP200ALIASES . |