在Web開(kāi)發(fā)過(guò)程中,我們經(jīng)常需要使用curl發(fā)送HTTP請(qǐng)求。php中提供了curl庫(kù),可以方便的進(jìn)行HTTP請(qǐng)求,該庫(kù)提供了多種選項(xiàng),可以實(shí)現(xiàn)各種復(fù)雜的請(qǐng)求。接下來(lái),我們將通過(guò)舉例來(lái)介紹curl庫(kù)的基本用法和一些高級(jí)用法。
要使用curl庫(kù),我們需要使用curl_init()函數(shù)進(jìn)行初始化,如下所示。
$ch = curl_init();
一般情況下,我們需要設(shè)置curl發(fā)送請(qǐng)求的URL地址,以及一些其他的選項(xiàng)。例如,我們可以設(shè)置請(qǐng)求的User-Agent,如下所示。
curl_setopt($ch, 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');
我們還可以設(shè)置請(qǐng)求的超時(shí)時(shí)間,如下所示。
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
接下來(lái),我們需要發(fā)送HTTP請(qǐng)求,使用curl_exec()函數(shù)即可。例如,我們可以發(fā)送一個(gè)GET請(qǐng)求,獲取百度搜索的首頁(yè)數(shù)據(jù),如下所示。
$url = 'http://www.baidu.com/s?wd=curl'; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); echo $result;
以上代碼將發(fā)送一個(gè)GET請(qǐng)求,獲取百度搜索的curl相關(guān)的頁(yè)面。我們使用curl_setopt()函數(shù)設(shè)置了請(qǐng)求的URL地址和返回的數(shù)據(jù)形式,使用curl_exec()函數(shù)發(fā)送請(qǐng)求,并輸出請(qǐng)求結(jié)果。
當(dāng)然,我們還可以發(fā)送POST請(qǐng)求,發(fā)送JSON數(shù)據(jù)等等。例如,我們可以發(fā)送一個(gè)POST請(qǐng)求,提交一個(gè)表單數(shù)據(jù),如下所示。
$url = 'http://localhost/post.php'; $data = array('name' =>'張三', 'age' =>25); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); echo $result;
以上代碼將發(fā)送一個(gè)POST請(qǐng)求,提交一個(gè)表單數(shù)據(jù),向http://localhost/post.php頁(yè)面提交一個(gè)名字為“張三”,年齡為“25”的表單數(shù)據(jù)。我們使用curl_setopt()函數(shù)設(shè)置了請(qǐng)求的URL地址和發(fā)送的數(shù)據(jù)形式,使用curl_exec()函數(shù)發(fā)送請(qǐng)求,并輸出請(qǐng)求結(jié)果。
在使用curl發(fā)送HTTP請(qǐng)求的過(guò)程中,我們還可以設(shè)置一些高級(jí)選項(xiàng),例如HTTPS請(qǐng)求,請(qǐng)求頭信息等等。例如,我們可以發(fā)送一個(gè)HTTPS請(qǐng)求,獲取百度搜索的首頁(yè)數(shù)據(jù),如下所示。
$url = 'https://www.baidu.com/s?wd=curl'; curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); echo $result;
以上代碼將發(fā)送一個(gè)HTTPS請(qǐng)求,獲取百度搜索的curl相關(guān)的頁(yè)面。由于HTTPS請(qǐng)求需要進(jìn)行SSL驗(yàn)證,我們需要設(shè)置curl_setopt()函數(shù)的CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST選項(xiàng),分別為false表示關(guān)閉SSL驗(yàn)證。我們使用curl_setopt()函數(shù)設(shè)置了請(qǐng)求的URL地址和返回的數(shù)據(jù)形式,使用curl_exec()函數(shù)發(fā)送請(qǐng)求,并輸出請(qǐng)求結(jié)果。
總之,php curl庫(kù)提供了方便快捷的HTTP請(qǐng)求功能,為Web開(kāi)發(fā)提供了很好的支持。我們可以根據(jù)自己的需要,設(shè)置curl的不同選項(xiàng),發(fā)送不同類型的HTTP請(qǐng)求,來(lái)實(shí)現(xiàn)各種復(fù)雜的功能。