PHP cURL是一個非常強大的網絡請求庫,可以通過它快速地實現HTTP請求、發送POST、GET等請求,獲取目標網站數據,方便處理和使用。
這里是一個簡單的例子,通過PHP cURL發送HTTP GET請求:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://www.baidu.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $html = curl_exec($ch); curl_close($ch); echo $html;
第一行定義了一個cURL句柄,然后使用curl_setopt函數配置了請求的URL,設置了CURLOPT_RETURNTRANSFER選項以獲取響應結果,然后使用curl_exec發送請求以獲取目標網頁,最后通過curl_close函數關閉了句柄。
如果你希望獲取的是json數據格式,可以將CURLOPT_RETURNTRANSFER和CURLOPT_HEADERHEADER選項都設置為true,并在curl_exec函數后調用json_decode函數將結果解析成數組:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://api.example.com/getData"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); $result = curl_exec($ch); list($header, $json) = explode("\r\n\r\n", $result, 2); curl_close($ch); $data = json_decode($json, true); var_dump($data);
如果你希望發送POST請求,可以設置CURLOPT_POST選項為1,然后用curl_setopt函數設置CURLOPT_POSTFIELDS選項來指定POST數據:
$data = array( 'key1' =>'value1', 'key2' =>'value2' ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://api.example.com/postData"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); $result = curl_exec($ch); curl_close($ch); var_dump($result);
同時,有時候需要帶上header或cookie來請求,可以使用curl_setopt函數設置CURLOPT_HTTPHEADER或CURLOPT_COOKIE,例如:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://api.example.com/headerData"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Authorization: Bearer '.$accessToken )); curl_setopt($ch, CURLOPT_COOKIE, 'session_id='.$sessionId); $result = curl_exec($ch); curl_close($ch); var_dump($result);
以上僅僅是PHP cURL這個強大的網絡請求庫中的一些簡單而常用的用法,如果你希望更詳細地了解它的使用方式和更復雜的請求場景,可以查看官方文檔。另外,為了在代碼運行之前查看curl執行的日志,我們可以打開curl的verbose模式,只需要同時設置CURLOPT_VERBOSE選項和CURLOPT_STDERR選項即可:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://api.example.com/getData"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_VERBOSE, true); $fp = fopen('php://temp', 'w+'); curl_setopt($ch, CURLOPT_STDERR, $fp); $result = curl_exec($ch); rewind($fp); $verboseLog = stream_get_contents($fp); fclose($fp); curl_close($ch); echo $verboseLog;