PHP cURL使用小結

cURL簡介

  1. cURL是什麼?
    cURL(Client URL Library Functions)由 Daniel Stenberg 建立的libcurl庫,官方定義爲:curl is a command line tool for transferring data with URL syntax,即便用URL語法傳輸數據的命令行工具,cURL是客戶端向服務器請求資源的工具,其餘的方式有file_get_contents()、file()、readfile()等。缺點是:不能完成cookies、驗證、表單提交、文件上傳這些操做,支持的協議少。curl容許你與各類的服務器使用各類類型的協議進行鏈接和通信。libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap協議。libcurl同時也支持HTTPS認證、HTTP POST、HTTP PUT、 FTP 上傳(這個也能經過PHP的FTP擴展完成)、HTTP 基於表單的上傳、代理、cookies和用戶名+密碼的認證。php

  2. 何時用cURL?
  • 網頁爬蟲
  • 實現文件上傳下載
  • 模擬登錄
  • 獲取接口數據
  • 全部網絡上的資源均可以使用cURL訪問和下載
  1. 如何使用cURL?
    先開啓擴展,linux下須要在編譯PHP時在configure命令上加上「–with-curl」 參數,windows下在php.ini中將extension=php_curl.dll前面的分號去掉開啓。
  2. 初始化(curl_init)
  3. 設置curl執行時相關選項(curl_setopt())
  4. 執行並獲取結果(curl_exec())
  5. 釋放資源(cURL句柄)(curl_close())

cURL經常使用函數

常規函數

  • curl_init()
    做用
    初始化一個cURL會話
    語法
    resource curl_init ([ string $url = NULL ] )
    參數
    url
    若是提供了該參數,CURLOPT_URL 選項將會被設置成這個值。你也可使用curl_setopt()函數手動地設置這個值
    返回值
    若是成功,返回一個cURL句柄,出錯返回 FALSElinux

  • curl_setopt()
    做用
    設置一個cURL傳輸選項
    語法
    bool curl_setopt ( resource $ch , int $option , mixed $value )
    參數
    $ch
    由curl_init()返回的cURL句柄
    $option
    須要設置的CURLOPT_XXX選項
    $value
    設置在$option選項的值
    經常使用選項
    能夠設置成布爾類型
    CURLOPT_AUTOREFERER
    當根據Location重定向時,自動設置header中的referer信息
    CURLOPT_BINARYTRANSFER
    在啓用CURLOPT_RETURNTRANSFER的時候,返回原生的RAW輸出
    CURL_COOKIESESSION
    啓用時curl會僅僅傳遞一個session cookie,忽略其餘的cookie。默認狀況下cURL會將全部的cookie返回給服務端。
    session cookie是指哪些用來判斷服務器端的session是否有效而存在的cookie
    CURLOPT_CRLF
    啓用時將Unix的換行符換成回車符
    CURLOPT_FRESH_CONNECT
    強制獲取一個新的鏈接,替代緩存中的鏈接
    CURLOPT_HEADER
    啓用時會將頭文件的信息做爲數據流輸出
    CURLOPT_NOBODY
    啓用時將不對HTML中的BODY部分進行輸出
    CURLOPT_POST
    啓用時會發送一個常規的POST請求,類型爲:application/x-www-form-urlencodeed,就像表單提交同樣
    CURLOPT_PUT
    啓用時容許HTTP發送文件,必須同事設置CURLOPT_INFILE和CURLOPT_INFILESIZE
    CURLOPT_RETURNTRANSFER
    將curl_exec()獲取的信息以文件流的形式返回,而不是直接輸出
    CURLOPT_UPLOAD
    啓用後容許文件上傳
    CURLOPT_SSL_VERIFYPEER
    禁用後cURL將終止從服務端進行驗證。使用CURLOPT_CAINFO選項設置證書使用CURLOPT_CAPATH選項設置證書目錄 若是CURLOPT_SSL_VERIFYPEER(默認值爲2)被啓用,CURLOPT_SSL_VERIFYHOST須要被設置成TRUE不然設置爲FALSE。
    能夠設置成整型的選項
    CURLOPT_BUFFERSIZE
    每次獲取的數據中讀入緩存的大小,可是不保證這個值每次都會被填滿
    CURLOPT_CONNECTTIMEOUT
    在發起鏈接前等待的時間,若是設置爲0,則無限等待
    CURLOPT_CONNECTTIMEOUT_MS
    嘗試鏈接等待的時間,以毫秒爲單位,若是設置爲0,則無限等待
    CURLOPT_INFILESIZE
    設定上傳文件的大小限制,字節(byte)爲單位
    CURLOPT_MAXCONNECTS
    容許的最大鏈接數量,超過是會經過CURLOPT_CLOSEPOLICY決定應該中止哪些鏈接
    CURLOPT_PORT
    用來指定鏈接端口
    CURLOPT_TIMEOUT
    設置cURL容許執行的最長秒數
    CURLOPT_TIMEOUT_MS
    設置cURL容許執行的最長毫秒數。
    CURLOPT_SSL_VERIFYHOST
    1 檢查服務器SSL證書中是否存在一個公用名(common name)。譯者注:公用名(Common Name)通常來說就是填寫你將要申請SSL證書的域名 (domain)或子域名(sub domain)。2 檢查公用名是否存在,而且是否與提供的主機名匹配
    能夠設置成字符串的選項
    CURLOPT_COOKIE
    設定HTTP請求中"Cookie: "部分的內容。多個cookie用分號分隔,分號後帶一個空格(例如, "fruit=apple; colour=red")。
    CURLOPT_COOKIEFILE
    包含cookie數據的文件名,cookie文件的格式能夠是Netscape格式,或者只是純HTTP頭部信息存入文件。
    CURLOPT_COOKIEJAR
    鏈接結束後保存cookie信息的文件。
    CURLOPT_ENCODING
    HTTP請求頭中"Accept-Encoding: "的值。支持的編碼有"identity","deflate"和"gzip"。若是爲空字符串"",請求頭會發送全部支持的編碼類型
    CURLOPT_POSTFIELDS
    所有數據使用HTTP協議中的"POST"操做來發送。要發送文件,在文件名前面加上@前綴並使用完整路徑。這個參數能夠經過urlencoded後的字符串相似'para1=val1&para2=val2&...'或使用一個以字段名爲鍵,字段數據爲值的數組。若是value是一個數組,Content-Type頭將會被設置成multipart/form-data
    CURLOPT_REFERER
    在HTTP請求頭中"Referer: "的內容。
    CURLOPT_URL
    須要獲取的URL地址,也能夠在curl_init()函數中設置
    CURLOPT_USERAGENT
    在HTTP請求中包含一個"User-Agent: "頭的字符串。
    CURLOPT_USERPWD
    傳遞一個鏈接中須要的用戶名和密碼,格式爲:"[username]:[password]"。
    能夠設置成數組的選項
    CURLOPT_HTTPHEADER
    一個用來設置HTTP頭字段的數組。使用以下的形式的數組進行設置: array('Content-type: text/plain', 'Content-length: 100')
    返回值
    成功時返回 TRUE, 或者在失敗時返回 FALSE網頁爬蟲

  • curl_exec()
    做用
    執行一個cURL會話
    語法
    mixed curl_exec ( resource $ch )
    參數
    由 curl_init() 返回的 cURL 句柄。
    返回值
    成功時返回 TRUE, 或者在失敗時返回 FALSE。
    若是 CURLOPT_RETURNTRANSFER選項被設置,函數執行成功時會返回執行的結果,失敗時返回 FALSEwindows

  • curl_close()
    做用
    關閉一個cURL會話
    語法
    void curl_close ( resource $ch )
    參數
    由 curl_init() 返回的 cURL 句柄。
    返回值
    沒有返回值數組

  • curl_version()
    做用
    獲取cURL版本信息緩存

  • curl_setopt_array()
    做用
    爲cURL傳輸會話批量設置選項
    語法
    bool curl_setopt_array ( resource $ch , array $options )
    參數
    $ch
    由 curl_init() 返回的 cURL 句柄。
    $options
    一個array用來肯定將被設置的選項及其值。數組的鍵值必須是一個有效的curl_setopt()常量或者是它們對等的整數值。
    返回值
    若是所有的選項都被成功設置,返回TRUE。若是一個選項不能被成功設置,立刻返回FALSE,忽略其後的任何在options數組中的選項服務器

  • curl_errno()
    做用
    返回最後一次的錯誤號
    語法
    int curl_errno ( resource $ch )
    參數
    由 curl_init() 返回的 cURL 句柄。
    返回值
    返回錯誤號或 0若是沒有錯誤發生。cookie

  • curl_error()
    做用
    返回一個保護當前會話最近一次錯誤的字符串
    語法
    string curl_error ( resource $ch )
    參數
    由 curl_init() 返回的 cURL 句柄。
    返回值
    返回錯誤信息或 '' (空字符串) 若是沒有任何錯誤發生。網絡

  • curl_strerror()
    做用
    返回錯誤代碼的字符串描述
    語法
    string curl_strerror ( int $errornum )
    參數
    $errornum
    一個cURL 錯誤碼的常量。
    返回值
    返回錯誤碼描述信息,非法錯誤碼返回NULL 。session

  • curl_escape()
    做用
    使用 URL 編碼給定的字符串
    語法
    string curl_escape ( resource $ch , string $str )
    參數
    $ch
    由 curl_init() 返回的 cURL 句柄
    $str
    須要編碼的字符串
    返回值
    返回編碼後的字符串 或者在失敗時返回 FALSE。

  • curl_unescape()
    做用
    解碼給定的 URL 編碼的字符串
    語法
    string curl_unescape ( resource $ch , string $str )
    參數
    $ch
    由 curl_init() 返回的 cURL 句柄
    $str
    須要解碼的 URL 編碼字符串
    返回值
    返回解碼後的字符串 或者在失敗時返回 FALSE。

  • curl_copy_handle()
    做用
    複製一個cURL句柄和它的全部選項
    語法
    resource curl_copy_handle ( resource $ch )
    參數
    由 curl_init() 返回的 cURL 句柄。
    返回值
    返回一個新的cURL句柄。

  • curl_file_create()
    做用
    建立一個 CURLFile 對象
    語法
    CURLFile curl_file_create ( string $filename [, string $mimetype [, string $postname ]] )
    參數
    $filename
    上傳文件的路徑
    $mimetype
    文件的MIME類型
    $postname
    文件名
    返回值
    CURLFile對象

  • curl_reset()
    做用
    重置libcurl會話句柄的全部選項
    語法
    void curl_reset ( resource $ch )
    參數
    由 curl_init() 返回的 cURL 句柄。
    返回值
    沒有返回值

  • curl_getinfo()
    做用
    獲取一個cURL鏈接資源句柄的信息
    語法
    mixed curl_getinfo ( resource $ch [, int $opt = 0 ] )
    參數
    $ch
    由 curl_init() 返回的 cURL 句柄
    $opt
    CURLINFO_EFFECTIVE_URL - 最後一個有效的URL地址
    ◦ CURLINFO_HTTP_CODE - 最後一個收到的HTTP代碼
    ◦ CURLINFO_FILETIME - 遠程獲取文檔的時間,若是沒法獲取,則返回值爲"-1"
    ◦ CURLINFO_TOTAL_TIME - 最後一次傳輸所消耗的時間
    ◦ CURLINFO_NAMELOOKUP_TIME - 名稱解析所消耗的時間
    ◦ CURLINFO_CONNECT_TIME - 創建鏈接所消耗的時間
    ◦ CURLINFO_PRETRANSFER_TIME - 從創建鏈接到準備傳輸所使用的時間
    ◦ CURLINFO_STARTTRANSFER_TIME - 從創建鏈接到傳輸開始所使用的時間
    ◦ CURLINFO_REDIRECT_TIME - 在事務傳輸開始前重定向所使用的時間
    ◦ CURLINFO_SIZE_UPLOAD - 上傳數據量的總值
    ◦ CURLINFO_SIZE_DOWNLOAD - 下載數據量的總值
    ◦ CURLINFO_SPEED_DOWNLOAD - 平均下載速度
    ◦ CURLINFO_SPEED_UPLOAD - 平均上傳速度
    ◦ CURLINFO_HEADER_SIZE - header部分的大小
    ◦ CURLINFO_HEADER_OUT - 發送請求的字符串
    ◦ CURLINFO_REQUEST_SIZE - 在HTTP請求中有問題的請求的大小
    ◦ CURLINFO_SSL_VERIFYRESULT - 經過設置CURLOPT_SSL_VERIFYPEER返回的SSL證書驗證請求的結果
    ◦ CURLINFO_CONTENT_LENGTH_DOWNLOAD - 從Content-Length: field中讀取的下載內容長度
    ◦ CURLINFO_CONTENT_LENGTH_UPLOAD - 上傳內容大小的說明
    ◦ CURLINFO_CONTENT_TYPE - 下載內容的Content-Type:值,NULL表示服務器沒有發送有效的Content-Type: header
    返回值
    若是 opt 被設置,以字符串形式返回它的值。不然,返回返回一個包含下列元素的關聯數組(它們分別對應於 opt):
    "url"
    ◦ "content_type"
    ◦ "http_code"
    ◦ "header_size"
    ◦ "request_size"
    ◦ "filetime"
    ◦ "ssl_verify_result"
    ◦ "redirect_count"
    ◦ "total_time"
    ◦ "namelookup_time"
    ◦ "connect_time"
    ◦ "pretransfer_time"
    ◦ "size_upload"
    ◦ "size_download"
    ◦ "speed_download"
    ◦ "speed_upload"
    ◦ "download_content_length"
    ◦ "upload_content_length"
    ◦ "starttransfer_time"
    ◦ "redirect_time"

多線程函數

  • curl_multi_init()
    做用
    返回一個新cURL批處理句柄
    語法
    resource curl_multi_init ( void )
    返回值
    成功時返回一個cURL批處理句柄,失敗時返回FALSE。

  • curl_multi_setopt()
    做用
    爲cURL並行處理設置一個選項
    語法
    bool curl_multi_setopt ( resource $mh , int $option , mixed $value )
    參數
    $mh
    由 curl_multi_init() 返回的 cURL 多個句柄。
    $option
    常量CURLMOPT_*之一
    $value
    須要設置給$option選項的值
    返回值
    成功時返回 TRUE, 或者在失敗時返回 FALSE。

  • curl_multi_exec()
    做用
    運行當前 cURL 句柄的子鏈接
    語法
    int curl_multi_exec ( resource $mh , int &$still_running )
    參數
    $mh
    由 curl_multi_init() 返回的 cURL 多個句柄。
    $still_running
    一個用來判斷操做是否仍在執行的標識的引用
    返回值
    一個定義於 cURL 預約義常量中的 cURL 代碼。

  • curl_multi_close()
    做用
    關閉一組cURL句柄
    語法
    void curl_multi_close ( resource $mh )
    參數
    $mh
    由 curl_multi_init() 返回的 cURL 多個句柄。

  • curl_multi_add_handle()
    做用
    向curl批處理會話中添加單獨的curl句柄
    語法
    int curl_multi_add_handle ( resource $mh , resource $ch )
    參數
    $mh
    由 curl_multi_init() 返回的 cURL 多個句柄。
    $ch
    由 curl_init() 返回的 cURL 句柄。
    返回值
    成功時返回0,失敗時返回CURLM_XXX之一的錯誤碼

  • curl_multi_getcontent()
    做用
    若是設置了CURLOPT_RETURNTRANSFER,則返回獲取的輸出的文本流
    語法
    string curl_multi_getcontent ( resource $ch )
    參數
    $ch
    由 curl_init() 返回的 cURL 句柄。
    返回值
    若是設置了CURLOPT_RETURNTRANSFER,則返回獲取的輸出的文本流。

  • curl_multi_info_read()
    做用
    獲取當前解析的cURL的相關傳輸信息
    語法
    array curl_multi_info_read ( resource $mh [, int &$msgs_in_queue = NULL ] )
    參數
    $mh
    由 curl_multi_init() 返回的 cURL 多個句柄。
    $msgs_in_queue
    仍在隊列中的消息數量
    返回值
    成功時返回相關信息的數組,失敗時返回FALSE。

  • curl_multi_remove_handle()
    做用
    移除curl批處理句柄資源中的某個句柄資源
    語法
    int curl_multi_remove_handle ( resource $mh , resource $ch )
    參數
    $mh
    由 curl_multi_init() 返回的 cURL 多個句柄。
    $ch
    由 curl_init() 返回的 cURL 句柄。
    返回值
    成功時返回一個cURL句柄,失敗時返回FALSE。

  • curl_multi_strerror()
    做用
    返回描述錯誤碼的字符串文本
    語法
    string curl_multi_strerror ( int $errornum )
    參數
    $errornum
    一個CURLM error codes錯誤碼常量
    返回值
    返回描述錯誤碼的字符串文本, 不然返回 NULL。

cURL實戰

cURL實現簡單的網絡爬蟲

cURL實現文件上傳下載

cURL訪問HTTPS資源

cURL請求接口數據

cURL訪問HTTPS資源

cURL模擬登錄

相關文章
相關標籤/搜索