在實(shí)現(xiàn)HTTP請(qǐng)求過(guò)程中, cookie的使用是至關(guān)重要的,這對(duì)于PHP HTTP客戶(hù)端也同樣適用。
一個(gè)典型的例子是,我們需要通過(guò)HTTP客戶(hù)端模擬一個(gè)登錄過(guò)程,這時(shí)就需要把客戶(hù)端獲取的cookie保存到本地,并在隨后的請(qǐng)求中把它發(fā)送到服務(wù)器。
$url = 'http://www.example.com/login.php' $post_data = array('username' =>'admin', 'password' =>'admin123'); $cookie_file = '/var/tmp/cookie.txt'; $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); $result = curl_exec($ch); curl_close($ch);
從上述代碼可以看出,我們需要自行維護(hù)一個(gè)cookie文件,來(lái)實(shí)現(xiàn)HTTP請(qǐng)求中對(duì)于cookie的存儲(chǔ)與發(fā)送。
如果我們需要從已有的cookie文件中讀取cookie進(jìn)行請(qǐng)求,可以使用以下代碼:
$cookie_file = '/var/tmp/cookie.txt'; $url = 'http://www.example.com/profile.php'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);//發(fā)送cookie文件 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch);
這里我們只指定了COOKIEFILE,沒(méi)有指定COOKIEJAR,所以在請(qǐng)求過(guò)程中只會(huì)發(fā)送cookie,而不會(huì)保存cookie到本地文件。
我們同樣可以手動(dòng)指定cookie,簡(jiǎn)單地使用以下代碼:
$url = 'http://www.example.com/process.php'; $cookie = 'SomeCookie=12345'; $header = array('Content-Type: application/x-www-form-urlencoded', 'Cookie:' . $cookie); $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); $result = curl_exec($ch); curl_close($ch);
如上所述,我們只需要在請(qǐng)求中手動(dòng)添加Cookie字段即可,這時(shí)我們不再需要使用cookie文件來(lái)存儲(chǔ)和發(fā)送cookie了。
無(wú)論是哪種方式,對(duì)于Cookie的操作都是非常重要的。通過(guò)實(shí)現(xiàn)對(duì)Cookie的維護(hù),我們能夠有效地進(jìn)行HTTP請(qǐng)求處理,并且在一定程度上保證數(shù)據(jù)的安全性。