首頁 >後端開發 >php教程 >php curl 學習總結

php curl 學習總結

WBOY
WBOY原創
2016-07-25 09:11:44784瀏覽

說明:使用curl 能快速的抓取網頁、模擬POST、GET請求,當然也不僅僅是HTTP協定的一些封裝,還支援FTP、代理、HTTPS、LDAP等應用。 curl並不是PHP特有的,很多語言中都有,一個東西好用,自然就會被推廣開,就像很多年前的log4j一樣的道理,剛開始是JAVA版本,隨後也出現log4c,log4c++?? curl 也是一樣的道理。 curl 並非PHP預設支持,需要在配置裡打開此項目的加載extension= php_curl.dll 在linux 下就記得編譯PHP的時候./configure 加上參數-with-curl。要查看curl 擴充功能是否打開,透過phpinfo(); 應該是可以看到的。

1) 基本用法(呼叫的一般順序) curl_init : 初始化, curl_setopt :設定參數選項 curl_exec:執行目前curl對象 curl_close:關閉目前curl物件

範例:造訪下面程式碼另存為的PHP網頁,我們看到了126 信箱的網頁。

  1. $curl = curl_init();

  2. // 設定你需要抓取的URL

  3. curl_setopt($curl, CURLOPT_URL, 'http://126.com');
  4. // 設定header 是否顯示頭部資訊

  5. //curl_setopt($curl, CURLOPT_HEADER, 1);
  6. // 設定cURL 參數,要求結果儲存到字串中還是輸出到螢幕上。

  7. //curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  8. // 執行cURL,請網頁

  9. $data = curl_exec($curl);
  10. // 關閉URL請求

  11. curl_close($curl);
  12. // 顯示所獲得的資料

  13. var_dump($data);
複製程式碼

2) POST 方式傳送資料

  1. ﹤?php
  2. $phoneNumber = '13912345678';
  3. $message = 'This message was generated per$curlPost = 'pNUMBER=' . urlencode($phoneNumber) . '&MESSAGE=' . urlencode($message) . '&SUBMIT=Send';
  4. $ch = curl_init();
  5. curl_setopt($chch, CURLOPT_URL, 'http://www.example.com/sendSMS.php');
  6. curl_setopt($ch, CURLOPT_HEADER, 1);
  7. curl_setopt($ch, CURLOPT_RETURNTRANER, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
  8. $data = curl_exec($ch);
  9. curl_close($ch);? >
  10. 複製程式碼
3) 代理伺服器

﹤?php
$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://www.example. com');
  1. curl_setopt($ch, CURLOPT_HEADER, 1);
  2. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  3. curl_setopt($ch, CURLONN_HTTPtopy); , CURLOPT_PROXY, 'fakeproxy.com:1080');
  4. curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');
  5. $data = curl_exec($ch);
  6. curl_close($ch);
  7. curl_close($ch);
  8. curl_close($ch);
  9. curl_close($);
  10. ?﹥
複製程式碼

4) 關於SSL和Cookie 關於SSL也就是HTTPS協議,你只需要把CURLOPT_URL連接中的http://變成https://就可以了。當然,還有一個參數叫CURLOPT_SSL_VERIFYHOST可以設定為驗證站點。 關於Cookie,你需要了解下面三個參數: CURLOPT_COOKIE,在當面的會話中設定一個cookie CURLOPT_COOKIEJAR,當會話結束的時候儲存一個Cookie CURLOPT_COOKIEFILE,Cookie的文件。

5) HTTP伺服器認證

  1. ﹤?php

  2. $ch = curl_init();
  3. curl_setopt($ , CURLOPT_URL, 'http://www.example.com');
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  5. curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_URL); [username]:[password]')
  6. $data = curl_exec($ch);

  7. curl_close($ch);
  8. ?﹥
  9. 複製程式碼

總結:雖然後面附加了幾個例子,其實順序跟第一個介紹的都一樣,只是會根據不同情況,在 curl_setopt 函數會有所不同。我們也發現這個函數的參數非常多,而且非常靈活。

以下關於此函數各項使用參數: bool curl_setopt (int ch, string option, mixed value) curl_setopt()函數將為一個CURL會話設定選項。 option參數是你想要的設置,value是這個選項給定的值。

下列選項的值將被當作長整形使用(在option參數中指定): * CURLOPT_INFILESIZE: 當你上傳一個檔案到遠端站點,這個選項告訴PHP你上傳檔案的大小。 * CURLOPT_VERBOSE: 如果你想CURL報告每一件意外的事情,設定這個選項為一個非零值。 * CURLOPT_HEADER: 如果你想把一個頭包含在輸出中,設定這個選項為一個非零值。 * CURLOPT_NOPROGRESS: 如果你不會PHP為CURL傳輸顯示一個進程條,設定這個選項為一個非零值。注意:PHP自動設定這個選項為非零值,你應該只是為了調試的目的而改變這個選項。 * CURLOPT_NOBODY: 如果你不想在輸出中包含body部分,設定這個選項為一個非零值。 * CURLOPT_FAILONERROR: 如果你想讓PHP在發生錯誤(HTTP代碼回傳大於等於300)時,不顯示,設定這個選項為一人非零值。預設行為是回傳一個正常頁,忽略程式碼。 * CURLOPT_UPLOAD: 如果你想讓PHP為上傳做準備,設定這個選項為一個非零值。 * CURLOPT_POST: 如果你想PHP去做一個正規的HTTP POST,設定這個選項為一個非零值。這個POST是普通的 application/x-www-from-urlencoded 類型,多數被HTML表單使用。 * CURLOPT_FTPLISTONLY: 設定這個選項為非零值,PHP將列出FTP的目錄名稱清單。 * CURLOPT_FTPAPPEND: 設定這個選項為一個非零值,PHP將應用遠端檔案代替覆寫它。 * CURLOPT_NETRC: 設定這個選項為一個非零值,PHP會在你的 ~./netrc 檔案中尋找你要建立連線的遠端網站的使用者名稱及密碼。 * CURLOPT_FOLLOWLOCATION: 設定這個選項為一個非零值(象「Location: “)的頭,伺服器會把它當做HTTP頭的一部分發送(注意這是遞歸的,PHP將發送形如「Location: 「的頭) 。 * CURLOPT_PUT: 設定這個選項為一個非零值去用HTTP上傳一個檔案。要上傳這個檔案必須設定CURLOPT_INFILE和CURLOPT_INFILESIZE選項. * CURLOPT_MUTE: 設定這個選項為一個非零值,PHP對於CURL函數將完全沉默。 * CURLOPT_TIMEOUT: 設定一個長整形數,作為最大延續多少秒。 * CURLOPT_LOW_SPEED_LIMIT: 設定一個長整形數,控制傳送多少位元組。 * CURLOPT_LOW_SPEED_TIME: 設定一個長整形數,控制多少秒傳送CURLOPT_LOW_SPEED_LIMIT規定的位元組數。 * CURLOPT_RESUME_FROM: 傳遞一個包含位元組偏移位址的長整形參數,(你想轉移到的開始表單)。 * CURLOPT_SSLVERSION: 傳遞一個包含SSL版本的長參數。預設PHP將被它自己努力的確定,在更多的安全中你必須手動設定。 * CURLOPT_TIMECONDITION: 傳遞一個長參數,指定怎麼處理CURLOPT_TIMEVALUE參數。你可以設定這個參數為TIMECOND_IFMODSINCE 或 TIMECOND_ISUNMODSINCE。這僅用於HTTP。 * CURLOPT_TIMEVALUE: 傳遞一個從1970-1-1開始到現在的秒數。這個時間將會被CURLOPT_TIMEVALUE選項當作指定值使用,或被預設TIMECOND_IFMODSINCE使用。

下列選項的值會被當作字串: * CURLOPT_URL: 這是你想用PHP取回的URL位址。你也可以在用curl_init()函數初始化時設定這個選項。 * CURLOPT_USERPWD: 傳遞一個形如[username]:[password]風格的字串,作用PHP去連接。 * CURLOPT_PROXYUSERPWD: 傳遞一個形如[username]:[password] 格式的字串去連接HTTP代理。 * CURLOPT_RANGE: 傳遞一個你想指定的範圍。它應該是”X-Y”格式,X或Y是被除外的。 HTTP傳送同樣支援幾個間隔,用逗句來分隔(X-Y,N-M)。 * CURLOPT_POSTFIELDS: 傳遞一個作為HTTP “POST”操作的所有資料的字串。 * CURLOPT_REFERER: 在HTTP請求中包含一個”referer”頭的字串。 * CURLOPT_USERAGENT: 在HTTP請求中包含一個”user-agent”頭的字串。 * CURLOPT_FTPPORT: 傳遞一個包含被ftp “POST”指令使用的IP位址。這個POST指令告訴遠端伺服器去連接我們指定的IP位址。這個字串可以是一個IP位址,一個主機名,一個網路介面名(在UNIX下),或是‘-’(使用系統預設IP位址)。 * CURLOPT_COOKIE: 傳遞一個包含HTTP cookie的頭連接。 * CURLOPT_SSLCERT: 傳遞一個包含PEM格式憑證的字串。 * CURLOPT_SSLCERTPASSWD: 傳遞一個包含使用CURLOPT_SSLCERT證書必要的密碼。 * CURLOPT_COOKIEFILE: 傳遞一個包含cookie資料的檔案的名字的名字的字串。這個cookie檔案可以是Netscape格式,或是堆存在檔案中的HTTP風格的頭。 * CURLOPT_CUSTOMREQUEST: 當進行HTTP請求時,傳遞一個字元被GET或HEAD使用。要進行DELETE或其它操作是有益的,更Pass a string to be used instead of GET or HEAD when doing an HTTP request. This is useful for doing or another, more obscure, HTTP request. 注意: 在確認你的伺服器支援命令先不要這樣做。下列的選項要求一個檔案描述(透過使用fopen()函數取得):  * CURLOPT_FILE: 這個文件將會是你放置傳送的輸出文件,預設是STDOUT. * CURLOPT_INFILE: 這個檔案是你傳送過來的輸入檔。 * CURLOPT_WRITEHEADER: 這個檔案寫有你輸出的頭部分。 * CURLOPT_STDERR: 這個檔案寫有錯誤而不是stderr。用來獲取需要登入的頁面的例子,當前做法是每次或許都登入一次,有需要的人再做改進了.

常用函數: curl_close — 關閉一個curl會話 curl_copy_handle — 拷貝一個curl連接資源的所有內容和參數 curl_errno — 傳回一個包含目前會話錯誤訊息的數字編號 curl_error — 傳回一個包含目前會話錯誤訊息的字串 curl_exec — 執行一個curl會話 curl_getinfo — 取得一個curl連線資源句柄的信息 curl_init — 初始化一個curl會話 curl_multi_add_handle — 在curl批次會話中新增單獨的curl句柄資源 curl_multi_close — 關閉一個批次句柄資源 curl_multi_exec — 解析一個curl批次句柄 curl_multi_getcontent — 傳回所取得的輸出的文字流 curl_multi_info_read — 取得目前解析的curl的相關傳輸訊息 curl_multi_init — 初始化一個curl批次句柄資源 curl_multi_remove_handle — 移除curl批次處理句柄資源中的某個句柄資源 curl_multi_select — Get all the sockets associated with the cURL extension, which can then be "selected" curl_setopt_array — 以陣列的形式為一個curl設定會話參數 curl_setopt — 為一個curl設定會話參數 curl_version — 取得curl相關的版本資訊



陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn