PHP cURL是一個(gè)非常強(qiáng)大的網(wǎng)絡(luò)請(qǐng)求庫(kù),可以通過(guò)它快速地實(shí)現(xiàn)HTTP請(qǐng)求、發(fā)送POST、GET等請(qǐng)求,獲取目標(biāo)網(wǎng)站數(shù)據(jù),方便處理和使用。
這里是一個(gè)簡(jiǎn)單的例子,通過(guò)PHP cURL發(fā)送HTTP GET請(qǐng)求:
$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;
第一行定義了一個(gè)cURL句柄,然后使用curl_setopt函數(shù)配置了請(qǐng)求的URL,設(shè)置了CURLOPT_RETURNTRANSFER選項(xiàng)以獲取響應(yīng)結(jié)果,然后使用curl_exec發(fā)送請(qǐng)求以獲取目標(biāo)網(wǎng)頁(yè),最后通過(guò)curl_close函數(shù)關(guān)閉了句柄。
如果你希望獲取的是json數(shù)據(jù)格式,可以將CURLOPT_RETURNTRANSFER和CURLOPT_HEADERHEADER選項(xiàng)都設(shè)置為true,并在curl_exec函數(shù)后調(diào)用json_decode函數(shù)將結(jié)果解析成數(shù)組:
$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);
如果你希望發(fā)送POST請(qǐng)求,可以設(shè)置CURLOPT_POST選項(xiàng)為1,然后用curl_setopt函數(shù)設(shè)置CURLOPT_POSTFIELDS選項(xiàng)來(lái)指定POST數(shù)據(jù):
$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);
同時(shí),有時(shí)候需要帶上header或cookie來(lái)請(qǐng)求,可以使用curl_setopt函數(shù)設(shè)置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這個(gè)強(qiáng)大的網(wǎng)絡(luò)請(qǐng)求庫(kù)中的一些簡(jiǎn)單而常用的用法,如果你希望更詳細(xì)地了解它的使用方式和更復(fù)雜的請(qǐng)求場(chǎng)景,可以查看官方文檔。另外,為了在代碼運(yùn)行之前查看curl執(zhí)行的日志,我們可以打開curl的verbose模式,只需要同時(shí)設(shè)置CURLOPT_VERBOSE選項(xiàng)和CURLOPT_STDERR選項(xiàng)即可:
$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;