色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

php curl跳轉(zhuǎn)

吳曉飛2年前8瀏覽0評論

當(dāng)我們使用 PHP 中的 cURL 函數(shù)時,有時會遇到需要跟隨重定向的情況。在不做特殊處理的情況下,cURL 函數(shù)默認(rèn)不會自動跳轉(zhuǎn)到重定向后的新 URL,而是返回重定向前的原始 URL。

舉個例子,假設(shè)我們向一個網(wǎng)站發(fā)送 GET 請求:

$url = 'http://example.com';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
echo $result;

通常情況下,這個請求會返回 http://example.com 所對應(yīng)的頁面內(nèi)容。但是如果這個網(wǎng)站進(jìn)行了重定向,比如將 http://example.com 重定向到 http://www.example.com,那么 cURL 函數(shù)默認(rèn)會返回的依然是 http://example.com 的內(nèi)容,而不是 http://www.example.com 。

為了讓 cURL 函數(shù)自動跟隨重定向,我們需要在請求選項(xiàng)中設(shè)置 CURLOPT_FOLLOWLOCATION 的值為 true。修改上面的代碼:

$url = 'http://example.com';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec($ch);
curl_close($ch);
echo $result;

現(xiàn)在,如果我們向重定向過的網(wǎng)站發(fā)送 GET 請求,cURL 函數(shù)會自動跳轉(zhuǎn)到新的 URL 并返回對應(yīng)頁面的內(nèi)容。

需要注意的是,如果目標(biāo)網(wǎng)站進(jìn)行了過多的重定向,cURL 函數(shù)默認(rèn)只會跟隨前面幾次重定向。如果希望完全跟隨所有重定向,可以將 CURLOPT_MAXREDIRS 選項(xiàng)設(shè)為 -1。

在實(shí)際使用中,我們會發(fā)現(xiàn),有一些網(wǎng)站進(jìn)行了特殊的重定向處理,比如采用了 JavaScript 重定向或者基于 Cookie 的跳轉(zhuǎn)。針對這些情況,我們可以考慮使用 CURLINFO_REDIRECT_URL 選項(xiàng)獲取重定向后的新 URL。

$url = 'http://example.com';
$max_retries = 5;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, -1);
$result = curl_exec($ch);
$redirect_count = 0;
while (curl_errno($ch) == 47 && $redirect_count< $max_retries) {
$url = curl_getinfo($ch, CURLINFO_REDIRECT_URL);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
$redirect_count++;
}
curl_close($ch);
echo $result;

上面的代碼示例通過 CURLINFO_REDIRECT_URL 獲取重定向后的新 URL,并不斷重試訪問,直到達(dá)到最大重試次數(shù)或者跳轉(zhuǎn)到最終的目標(biāo)頁面為止。

總之,使用 cURL 函數(shù)進(jìn)行跳轉(zhuǎn)需要注意 CURLOPT_FOLLOWLOCATION 和 CURLOPT_MAXREDIRS 選項(xiàng)的設(shè)置,并且針對一些特殊情況需要特殊處理。