php語法 – 如何使用curl讀取api或實作網頁爬蟲

如果想使用php去call api或者是去讀取別的網站,這個時候就要用到curl了,本文就是舉例說明怎麼操作curl,先來個基本範例:

// 創建 CURL 對象
$curl = curl_init();

// 設置 CURL 選項
curl_setopt($curl, CURLOPT_URL, "https://www.example.com/");  // 設置要爬取的網址
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  // 設置返回的資料不直接輸出
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);  // 設置自動重定向
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");  // 設置請求頭中的 User-Agent 字段

// 執行 CURL 請求
$result = curl_exec($curl);

// 關閉 CURL 對象
curl_close($curl);

// 輸出獲取到的內容
echo $result;

在上述範例中,我們首先使用 curl_init() 創建一個 CURL 對象。然後,我們使用 curl_setopt() 函數來設置 CURL 的各種選項,包括要爬取的網址、是否返回資料、是否自動重定向以及請求頭中的 User-Agent 字段等。最後,我們使用 curl_exec() 函數執行 CURL 請求,獲取到網頁內容,並使用 curl_close() 函數關閉 CURL 對象。最後,我們使用 echo 函數輸出獲取到的內容。

設置timeout

// 創建 CURL 對象
$curl = curl_init();

// 設置 CURL 選項
curl_setopt($curl, CURLOPT_URL, "https://www.example.com/");  // 設置要爬取的網址
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  // 設置返回的資料不直接輸出
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);  // 設置自動重定向
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");  // 設置請求頭中的 User-Agent 字段
curl_setopt($curl, CURLOPT_TIMEOUT, 10); // 設置超時時間為 10 秒

// 執行 CURL 請求
$result = curl_exec($curl);

// 關閉 CURL 對象
curl_close($curl);

// 輸出獲取到的內容
echo $result;

在這個範例中,我們使用 curl_setopt() 函數來設置 CURLOPT_TIMEOUT 選項,設置超時時間為 10 秒。如果在 10 秒內無法獲取到網頁內容,CURL 就會停止請求並返回錯誤。這對於防止請求過長時間而無法完成,或者是網頁服務器繁忙而無法回應的情況非常有用。

傳遞 POST 請求參數

// 創建 CURL 對象
$curl = curl_init();

// 設置 CURL 選項
curl_setopt($curl, CURLOPT_URL, "https://www.example.com/");  // 設置要爬取的網址
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  // 設置返回的資料不直接輸出
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);  // 設置自動重定向
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");  // 設置請求頭中的 User-Agent 字段
curl_setopt($curl, CURLOPT_POST, true); // 設置為 POST 請求
curl_setopt($curl, CURLOPT_POSTFIELDS, "name=John&age=30"); // 設置 POST 請求參數

// 執行 CURL 請求
$result = curl_exec($curl);

// 關閉 CURL 對象
curl_close($curl);

// 輸出獲取到的內容
echo $result;

在這個範例中,我們使用 `curl_setopt()` 函數來設置 `CURLOPT_POST` 選項,設置為 POST 請求,並使用 `CURLOPT_POSTFIELDS` 選項來傳遞 POST 請求參數。在這個例子中,我們傳遞了兩個參數 `name=John` 和 `age=30`。這對於需要向網頁提交表單資料的情況非常有用。

設置自定義標頭(header)

好的,以下是使用 PHP 中的 CURL 函數來爬取網頁內容的範例:

// 創建 CURL 對象
$curl = curl_init();

// 設置 CURL 選項
curl_setopt($curl, CURLOPT_URL, "https://www.example.com/");  // 設置要爬取的網址
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  // 設置返回的資料不直接輸出
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);  // 設置自動重定向
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");  // 設置請求頭中的 User-Agent 字段
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    "Accept-Language: en-US,en;q=0.8",
    "Referer: https://www.google.com/",
    "Origin: https://www.google.com/"
)); // 設置自定義標頭

// 執行 CURL 請求
$result = curl_exec($curl);

// 關閉 CURL 對象
curl_close($curl);

// 輸出獲取到的內容
echo $result;

在這個範例中,我們使用 curl_setopt() 函數來設置 CURLOPT_HTTPHEADER 選項,設置自定義請求頭。在這個例子中,我們設置了三個自定義請求頭,分別是 Accept-LanguageRefererOrigin。這對於需要模擬特定網頁行為的情況非常有用。例如,我們可以設置 Referer 頭,讓網站認為我們是從某個頁面跳轉而來的,或者設置 Origin 頭,讓網站認為我們是從某個域名發起的請求。

如上所述,CURL 是一個非常強大的 PHP 函數,可以用來爬取網頁內容,模擬特定網站行為,以及向網頁提交表單數據等。除了上述的三個常用選項外,CURL 還有許多其他選項可以用來設置代理、設置 SSL 證書、設置超時時間等等,這些都可以根據具體需求進行調整。

下面是一些常用的 CURL 選項:

  • CURLOPT_URL:設置要爬取的網址
  • CURLOPT_RETURNTRANSFER:設置返回的數據不直接輸出
  • CURLOPT_FOLLOWLOCATION:設置自動重定向
  • CURLOPT_USERAGENT:設置請求頭中的 User-Agent 字段
  • CURLOPT_HTTPHEADER:設置自定義請求頭
  • CURLOPT_POST:設置為 POST 請求
  • CURLOPT_POSTFIELDS:傳遞 POST 請求參數
  • CURLOPT_PROXY:設置代理
  • CURLOPT_SSL_VERIFYPEER:設置是否驗證 SSL 證書
  • CURLOPT_SSL_VERIFYHOST:設置是否驗證主機名

最後就是使用爬蟲還是請遵守一些網路禮儀,不要像是攻擊行為一樣濫爬,否則你會很容易被封鎖的哦!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Scroll to top