【php中的curl】php中curl的詳細解說

來源:互聯網
上載者:User

這幾天在幫一些同學處理問題的時候,突然發現這些同學是使用file_get_contents()函數來採集頁面內容的,貌似都沒有curl的概念亦或是對這種工具特別不敏感,

本文我來給大家詳細介紹下cURL的簡單的使用方法,下文我將會給大家詳細介紹cURL的進階應用程式,

好,廢話不多說,我們先來認識下什麼是cURL,可能還有很多同學沒有聽說過這個工具,我先來給大家簡單介紹下什麼是cURL:

cURL可以使用URL的文法類比瀏覽器來傳輸資料,

因為它是類比瀏覽器,因此它同樣支援多種協議,

FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP等協議都可以很好的支援,包括一些:

HTTPS認證,HTTP POST方法,HTTP PUT方法,FTP上傳,keyberos認證,HTTP上傳,Proxy 伺服器,cookies,使用者名稱/密碼認證,

下載檔案斷點續傳,上傳檔案斷點續傳,httpProxy 伺服器管道,甚至它還支援IPv6,scoket5Proxy 伺服器,通過httpProxy 伺服器上傳檔案

到FTP伺服器等等。

這就是我們為什麼要使用cURL的原因。

使用cURL完成簡單的請求主要分為以下四步:

1.初始化,建立一個新cURL資源

2.設定URL和相應的選項

3.抓取URL並把它傳遞給瀏覽器

4.關閉cURL資源,並且釋放系統資源

我們來採集一個頁面,通常情況下,我們會使用file_get_contents()函數來擷取:

像這樣:
  <?php   $str = file_get_contents('http://bbs.lampbrother.net');   //或者是:   $str = file("http://bbs.lampbrother.net");   //或者是:   readfile("http://bbs.lampbrother.net");   ?>
這樣我們會發現,我們沒有辦法有效地進行錯誤處理,更重要的是我們沒有辦法完成一些高難度的任務:

如:處理cookies,驗證,表單提交,檔案上傳等等。

好,現在我們來用程式碼完成上述cURL的四步: <?php   //1.初始化,建立一個新cURL資源   $ch = curl_init();   //2.設定URL和相應的選項   curl_setopt($ch, CURLOPT_URL, "http://www.lampbrother.net/");   curl_setopt($ch, CURLOPT_HEADER, 0);   //3.抓取URL並把它傳遞給瀏覽器   curl_exec($ch);   //4.關閉cURL資源,並且釋放系統資源   curl_close($ch);   ?>
上述四步中,其中第二步最為關鍵,可以設定一些進階選項:

例如上例中的CURLOPT_URL和CURLOPT_HEADER,分別代表“需要擷取的URL地址”和“啟用時會將標頭檔的資訊作為資料流輸出”,這些只是冰山一角,我們還可以設定很多選項:

選項 可選value值 備忘
CURLOPT_AUTOREFERER 當根據Location:重新導向時,自動化佈建header中的Referer:資訊。  
CURLOPT_BINARYTRANSFER 在啟用CURLOPT_RETURNTRANSFER的時候,返回原生的(Raw)輸出。  
CURLOPT_COOKIESESSION 啟用時curl會僅僅傳遞一個session cookie,忽略其他的cookie,預設狀況下cURL會將所有的cookie返回給服務端。session cookie是指那些用來判斷伺服器端的session是否有效而存在的cookie。  
CURLOPT_CRLF 啟用時將Unix的分行符號轉換成斷行符號分行符號。  
CURLOPT_DNS_USE_GLOBAL_CACHE 啟用時會啟用一個全域的DNS緩衝,此項為安全執行緒的,並且預設啟用。  
CURLOPT_FAILONERROR 顯示HTTP狀態代碼,預設行為是忽略編號小於等於400的HTTP資訊。  
CURLOPT_FILETIME 啟用時會嘗試修改遠程文檔中的資訊。結果資訊會通過curl_getinfo()函數的CURLINFO_FILETIME選項返回。 curl_getinfo().  
CURLOPT_FOLLOWLOCATION 啟用時會將伺服器伺服器返回的"Location: "放在header中遞迴的返回給伺服器,使用CURLOPT_MAXREDIRS可以限定遞迴返回的數量。  
CURLOPT_FORBID_REUSE 在完成互動以後強迫中斷連線,不能重用。  
CURLOPT_FRESH_CONNECT 強制擷取一個新的串連,替代緩衝中的串連。  
CURLOPT_FTP_USE_EPRT 啟用時當FTP下載時,使用EPRT (或 LPRT)命令。設定為FALSE時禁用EPRT和LPRT,使用PORT命令 only.  
CURLOPT_FTP_USE_EPSV 啟用時,在FTP傳輸過程中回複到PASV模式前首先嘗試EPSV命令。設定為FALSE時禁用EPSV命令。  
CURLOPT_FTPAPPEND 啟用時追加寫入檔案而不是覆蓋它。  
CURLOPT_FTPASCII CURLOPT_TRANSFERTEXT的別名。  
CURLOPT_FTPLISTONLY 啟用時只列出FTP目錄的名字。  
CURLOPT_HEADER 啟用時會將標頭檔的資訊作為資料流輸出。  
CURLINFO_HEADER_OUT 啟用時追蹤控制代碼的請求字串。 從 PHP 5.1.3 開始可用。CURLINFO_首碼是故意的(intentional)。
CURLOPT_HTTPGET 啟用時會設定HTTP的method為GET,因為GET是預設是,所以只在被修改的情況下使用。  
CURLOPT_HTTPPROXYTUNNEL 啟用時會通過HTTP代理來傳輸。  
CURLOPT_MUTE 啟用時將cURL函數中所有修改過的參數恢複預設值。  
CURLOPT_NETRC 在串連建立以後,訪問~/.netrc檔案擷取使用者名稱和密碼資訊串連遠端站台。  
CURLOPT_NOBODY 啟用時將不對HTML中的BODY部分進行輸出。  
CURLOPT_NOPROGRESS
啟用時關閉curl傳輸的進度條,此項的預設設定為啟用。
Note
PHP自動地設定這個選項為 TRUE,這個選項僅僅應當在以調試為目的時被改變。 

 
 
CURLOPT_NOSIGNAL 啟用時忽略所有的curl傳遞給php進行的訊號。在SAPI多線程傳輸時此項被預設啟用。 cURL 7.10時被加入。
CURLOPT_POST 啟用時會發送一個常規的POST請求,類型為:application/x-www-form-urlencoded,就像表單提交的一樣。  
CURLOPT_PUT 啟用時允許HTTP傳送檔案,必須同時設定CURLOPT_INFILECURLOPT_INFILESIZE  
CURLOPT_RETURNTRANSFER 將curl_exec()擷取的資訊以檔案流的形式返回,而不是直接輸出。  
CURLOPT_SSL_VERIFYPEER 禁用後cURL將終止從服務端進行驗證。使用CURLOPT_CAINFO選項設定認證使用CURLOPT_CAPATH選項設定認證目錄 如果CURLOPT_SSL_VERIFYPEER(預設值為2)被啟用,CURLOPT_SSL_VERIFYHOST需要被設定成TRUE否則設定為FALSE 自cURL 7.10開始預設為TRUE。從cURL 7.10開始預設綁定安裝。
CURLOPT_TRANSFERTEXT 啟用後對FTP傳輸使用ASCII模式。對於LDAP,它檢索純文字資訊而非HTML。在Windows系統上,系統不會把STDOUT設定成binary模式。  
CURLOPT_UNRESTRICTED_AUTH 在使用CURLOPT_FOLLOWLOCATION產生的header中的多個locations中持續追加使用者名稱和密碼資訊,即使網域名稱已發生改變。  
CURLOPT_UPLOAD 啟用後允許檔案上傳。  
CURLOPT_VERBOSE
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.