也不是什麼大不了的代碼,以前用file_get_content,感受總體上感覺效率不太好,我記得以前也發過類似的文章,搞忘了,現在重新記錄一下。
使用cURL庫發送HTTP請求,並設置了一些選項:
- CURLOPT_URL: 設置請求的URL。
- CURLOPT_TIMEOUT: 設置請求的超時時間,單位爲秒。
- CURLOPT_RETURNTRANSFER: 將返回的結果以字符串的形式返回,而不是直接輸出。
函數接受兩個參數:
- $durl: 請求的URL。
- $cache: 緩存時間,以秒爲單位,默認爲0,表示不緩存。(暫未完善,因爲使用了靜態網頁)
函數通過cURL發送請求,並將返回的結果以字符串的形式保存在變量$r中。然後使用curl_close()關閉cURL會話,並使用json_decode()將返回的JSON格式數據解碼爲關聯數組。最後返回該數組。
PHP代碼
public function get_api($durl,$cache = 0)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $durl);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$r = curl_exec($ch);
curl_close($ch);
return json_decode($r,true);
}升級優化
function get_api($durl, $cache = 0)
{
// 初始化cURL會話
$ch = curl_init();
// 設置cURL選項
curl_setopt($ch, CURLOPT_URL, $durl); // 設置請求的URL
curl_setopt($ch, CURLOPT_TIMEOUT, 5); // 設置超時時間爲5秒
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 將結果通過變量返回,而不是直接輸出
// 獲取Referer的主機部分
$referer_host = parse_url($durl, PHP_URL_SCHEME) . '://' . parse_url($durl, PHP_URL_HOST);
curl_setopt($ch, CURLOPT_REFERER, $referer_host); // 設置Referer頭,指定來源主機部分
// 模擬瀏覽器訪問的相關選項
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.9999.999 Safari/537.36'); // 設置User-Agent頭,模擬瀏覽器
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Accept: application/json',
'Content-Type: application/json; charset=utf-8'
));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// 執行請求並獲取響應結果
$r = curl_exec($ch);
// 關閉cURL會話
curl_close($ch);
// 解析JSON格式的響應結果,並返回解析後的數組
return json_decode($r, true);
}