如果想使用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-Language
、Referer
和 Origin
。這對於需要模擬特定網頁行為的情況非常有用。例如,我們可以設置 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:設置是否驗證主機名
最後就是使用爬蟲還是請遵守一些網路禮儀,不要像是攻擊行為一樣濫爬,否則你會很容易被封鎖的哦!