2012-12-27 55 views
2

儘管使用FOLLOWLOCATION和MAXREDIRS,但我仍收到301錯誤。 我不知道該怎麼做,我盡我所能:頭部爲0,FOLLOWLOCATION爲1,MAXREDIRS爲30,多次改變USERAGENT,單獨使用COOKIEFILE,然後COOKIEJAR一起使用,但沒有任何結果。即使使用FOLLOWLOCATION和MAXREDIRS,我仍然收到301錯誤,儘管使用FOLLOWLOCATION

這裏是最奇怪的部分:我試圖刮的同一網站不給其他網頁301,只爲某些。有任何想法嗎??

function curl_start($url) { 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.4"); 
curl_setopt($ch, CURLOPT_REFERER, "http://google.com/"); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_ENCODING, "gzip"); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); 
$html = curl_exec($ch); 
curl_close($ch); 
return $html; 
} 
+1

你能發佈你的代碼嗎?跟蹤位置應該工作。 –

+0

我編輯了帖子。 – Stefan

+1

您是否嘗試添加'CURLOPT_VERBOSE => 1'?從那裏應該很明顯它正在嘗試做什麼。不要讓我們猜測:) –

回答

0

它應該工作,除非你在安全模式下運行php。但即使如此,你的情況也不是問題。

無論如何,試試這個。

<?php 
function curl_redirect_exec($ch, &$redirects, $curlopt_header = false) { 
    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $data = curl_exec($ch); 
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    if ($http_code == 301 || $http_code == 302) { 
     list($header) = explode("\r\n\r\n", $data, 2); 
     $matches = array(); 
     preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); 
     $url = trim(array_pop($matches)); 
     $url_parsed = parse_url($url); 
     if (isset($url_parsed)) { 
      curl_setopt($ch, CURLOPT_URL, $url); 
      $redirects++; 
      return curl_redirect_exec($ch, $redirects); 
     } 
    } 
    if ($curlopt_header) 
     return $data; 
    else { 
     list(,$body) = explode("\r\n\r\n", $data, 2); 
     return $body; 
    } 
} 
?> 

SRC:http://www.php.net/manual/en/function.curl-setopt.php#95027

+0

我試過了,但功能沒有工作。我試圖修復它,但沒有運氣。 – Stefan

0

你的代碼工作我的服務器上。所以我想這與safe_mode有關,或者設置了open_basedir。您可以通過使用error_reporting(E_ALL);啓動腳本來檢查輸出警告。它應該顯示警告。

檢查以下鏈接以查看解決方案。

http://php.net/manual/ro/function.curl-setopt.php#102121

+0

謝謝你們,我仍然在爲此工作,但你們爲我提供了很好的見解。我有點困惑,因爲我只寫了一個與整個系統分開運行的小php腳本,並且它沒有任何問題地將頁面剪掉,但是當我將它的代碼合併到CMS中時,它不起作用。奇怪,但我會繼續嘗試。再次感謝。 – Stefan

相關問題