搜索
熱搜: 活動 交友 discuz
查看: 2649|回復: 0
打印 上一主題 下一主題

[PHP] [PHP]如何使用PHP CURL,基礎教學。

[複製鏈接]
跳轉到指定樓層
1#
發表於 2013-8-27 12:03:54 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
如果要用php來抓取網頁,一般人最常想到的就是「fopen」這個函式了。但現在有了更強大的函式,「curl」,至於這個函式怎麼用呢?就往下看吧!至於怎麼安裝,如何啟用php_curl:
  1. 去php.ini中的"extension=php_curl.dll"前面的“;”
複製代碼
如使用mysql一樣,首先,我們必須先建立一個「curl」的連線,也因此,必須使用到 curl_init() 這個函式。而為了怕建立連線忘了關閉。因此,必須先寫好關閉的函式,curl_close($ch)。
  1. // 建立CURL連線
  2. $ch = curl_init();

  3. // 設定擷取的URL網址
  4. curl_setopt($ch, CURLOPT_URL, "http://tw.yahoo.com/");
  5. curl_setopt($ch, CURLOPT_HEADER, false);

  6. // 執行
  7. curl_exec($ch);

  8. // 關閉CURL連線
  9. curl_close($ch);
複製代碼
不過大部分HTML標籤都可以抓下來,並且顯示,可是有部分可能與資料加密性或是轉址的部分,就無法正常顯示。

這段語法執行之後,你會發現到你是直接把Yahoo的網頁直接顯示出來,這樣對撰寫程式其實並沒有太大幫助,把還沒處理過的資料丟出來是沒有用的。
  1. // 建立CURL連線
  2. $ch = curl_init();

  3. // 設定擷取的URL網址
  4. curl_setopt($ch, CURLOPT_URL, "http://tw.yahoo.com/");
  5. curl_setopt($ch, CURLOPT_HEADER, false);
  6. //將curl_exec()獲取的訊息以文件流的形式返回,而不是直接輸出。
  7. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

  8. // 執行
  9. $temp=curl_exec($ch);

  10. // 關閉CURL連線
  11. curl_close($ch)
複製代碼
加上curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);之後,他會將curl_exec()獲取的訊息以文件流的形式返回傳給$temp,而不是直接輸出。如果要顯示出畫面的話就加上 echo $temp;就可以了。

結論:
到這邊簡言之,如果你要用CURL,就跟Session一樣,要先初始化 curl_init(),不然PHP部會知道該怎麼運作。初始化完成之後就要開始設定參數,就像是要不要顯示出來。或是其他相關的,詳細可以參考http://tw2.php.net/manual/en/function.curl-setopt.php。當你參數設定完畢,就要開始執行這個CURL。最後就要關閉這個CURL。這就算是一個簡單的CURL運用,當然還有更多變化。以後再慢慢分享。下面先分享一個比較常用的,傳遞參數的部分。

簡易的使用語法(GET):
  1. // 建立CURL連線
  2. $ch = curl_init();

  3. // 設定擷取的URL網址
  4. curl_setopt($ch, CURLOPT_URL, "http://localhost/SamplePath?SomeVar=test");
  5. curl_setopt($ch, CURLOPT_HEADER, false);

  6. //將curl_exec()獲取的訊息以文件流的形式返回,而不是直接輸出。
  7. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

  8. // 執行
  9. $temp=curl_exec($ch);

  10. // 關閉CURL連線
  11. curl_close($ch)
複製代碼
Get參數可以直接在網址傳遞例如網址後面加的?SomeVar=test,但是一旦資料量很大,用POST送還是比較適合。

簡易的使用語法(POST):
  1. // 建立CURL連線
  2. $ch = curl_init();

  3. // 設定擷取的URL網址
  4. curl_setopt($ch, CURLOPT_URL, "http://localhost/SamplePath?SomeVar=test");
  5. curl_setopt($ch, CURLOPT_HEADER, false);

  6. //將curl_exec()獲取的訊息以文件流的形式返回,而不是直接輸出。
  7. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

  8. //設定要傳的 變數A=值A & 變數B=值B (中間要用&符號串接)
  9. $PostData = "a=abc&b=def";

  10. //設定CURLOPT_POST 為 1或true,表示要用POST方式傳遞
  11. curl_setopt($ch, CURLOPT_POST, 1);
  12. //CURLOPT_POSTFIELDS 後面則是要傳接的POST資料。
  13. curl_setopt($ch, CURLOPT_POSTFIELDS, $PostData);

  14. // 執行
  15. $temp=curl_exec($ch);

  16. // 關閉CURL連線
  17. curl_close($ch)
複製代碼
以上的傳遞方式在某些狀況下很好用,譬如說,沒有設計完整的會員申請系統,就可以利用上面這些程式碼,做一個自動註冊申請機,至於這樣有什麼好玩,我就不知道了。

來源:四處流浪的阿基。I am Vagrant Walker

評分

參與人數 1央幣 +10 收起 理由
只要美女 + 10 精品文章

查看全部評分

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

本論壇為非營利之網路平台,所有文章內容均為網友自行發表,不代表論壇立場!若涉及侵權、違法等情事,請告知版主處理。


Page Rank Check

廣告刊登  |   交換連結  |   贊助我們  |   服務條款  |   免責聲明  |   客服中心  |   中央分站

手機版|中央論壇

GMT+8, 2026-5-22 06:15 , Processed in 0.035483 second(s), 18 queries .

Powered by Discuz!

© 2005-2015 Copyrights. Set by YIDAS

快速回復 返回頂部 返回列表