欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

php curl follow

PHP中的CURL是一種強(qiáng)大的工具,可以幫助我們創(chuàng)建web請(qǐng)求并與遠(yuǎn)程服務(wù)器進(jìn)行通信。在開(kāi)發(fā)中,有時(shí)我們需要跟隨其中的重定向或轉(zhuǎn)發(fā)請(qǐng)求,并且需要不斷地獲取服務(wù)器的返回?cái)?shù)據(jù)。這時(shí),就可以使用CURL的Follow選項(xiàng),讓我們來(lái)看看這個(gè)選項(xiàng)怎么用。 我們可以使用CURLOPT_FOLLOWLOCATION選項(xiàng)來(lái)設(shè)置跟隨重定向,例如:
$ch = curl_init("http://example.com");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$res = curl_exec($ch);
if($res === false) {
echo 'curl error: ' . curl_error($ch);
}
curl_close($ch);
echo $res;
在上面的例子中,$ch是CURL句柄,我們使用curl_setopt設(shè)置了CURLOPT_FOLLOWLOCATION選項(xiàng)為true,表示要跟隨重定向。之后,我們使用curl_exec來(lái)執(zhí)行請(qǐng)求,并根據(jù)返回結(jié)果$res來(lái)判斷是否出錯(cuò),最后關(guān)閉CURL。 但是,有時(shí)我們需要設(shè)置CURL的最大跟隨次數(shù),默認(rèn)情況下是20。如果要修改這個(gè)限制,可以使用CURLOPT_MAXREDIRS選項(xiàng)。例如,如果我們需要跟隨50次:
$ch = curl_init("http://example.com");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 50);
$res = curl_exec($ch);
if($res === false) {
echo 'curl error: ' . curl_error($ch);
}
curl_close($ch);
echo $res;
除了重定向之外,我們還可以跟隨請(qǐng)求中的301或302狀態(tài)碼。例如,如果我們要抓取某個(gè)網(wǎng)站的登錄頁(yè)面,但這個(gè)網(wǎng)站會(huì)將未登錄的用戶重定向至登錄頁(yè)面,那么我們可以使用CURLOPT_FOLLOWLOCATION選項(xiàng)來(lái)自動(dòng)跟隨這個(gè)重定向,達(dá)到自動(dòng)登錄的目的。
$ch = curl_init("http://example.com/login");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$res = curl_exec($ch);
if($res === false) {
echo 'curl error: ' . curl_error($ch);
}
curl_close($ch);
echo $res;
但是,有時(shí)我們需要跳過(guò)某些特定的重定向,例如,我們?cè)L問(wèn)的網(wǎng)站做了權(quán)限判斷,未登錄用戶無(wú)法訪問(wèn)特定頁(yè)面,當(dāng)我們發(fā)送請(qǐng)求時(shí),服務(wù)器返回302狀態(tài)碼并重定向至登錄頁(yè)面,這時(shí)我們需要手動(dòng)跳過(guò)這個(gè)重定向,才能獲得想要的頁(yè)面。我們可以使用CURLOPT_FOLLOWLOCATION選項(xiàng)配合CURLOPT_HEADER選項(xiàng)和CURLOPT_RETURNTRANSFER選項(xiàng)來(lái)實(shí)現(xiàn):
$ch = curl_init("http://example.com/page");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$res = curl_exec($ch);
if($res === false) {
echo 'curl error: ' . curl_error($ch);
}
// 獲取返回頭信息
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($res, 0, $header_size);
// 如果返回302狀態(tài)碼,并且返回頭信息中有Location字段,則跳過(guò)重定向
if(preg_match('/^HTTP\/\d\.\d 302/', $header) && preg_match('/Location: (.+)/', $header, $match)) {
$url = trim($match[1]);
curl_setopt($ch, CURLOPT_URL, $url);
$res = curl_exec($ch);
}
curl_close($ch);
echo $res;
在上面的例子中,我們通過(guò)設(shè)置CURLOPT_HEADER選項(xiàng)為true,使CURL返回頭信息和請(qǐng)求內(nèi)容,并通過(guò)curl_getinfo獲取頭信息長(zhǎng)度$header_size和正則表達(dá)式獲取返回頭信息中的狀態(tài)碼和重定向地址。在判斷重定向時(shí),我們利用CURLOPT_URL選項(xiàng)來(lái)設(shè)置跳過(guò)重定向后的URL,并重新執(zhí)行curl_exec獲取跳過(guò)重定向后的內(nèi)容。最后關(guān)閉CURL,輸出結(jié)果。 總之,CURL的Follow選項(xiàng)可以幫助我們實(shí)現(xiàn)跟隨重定向和跳過(guò)特定的重定向,使我們的web請(qǐng)求更加高效和方便。