使用curl擷取跳轉後網址時,如果直接設定網址能夠成功擷取到,將網址賦值給變數,在使用變數傳給curl就擷取不到
$ch= curl_init("http://www.baidu.com");curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ch, CURLOPT_AUTOREFERER, 1);curl_setopt($ch, CURLOPT_NOBODY, 1);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HEADER, 1);curl_exec($ch);$aaa = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);echo $aaa;
以上代碼能夠擷取到跳轉後的網址;下面的寫法就擷取不到,擷取到的是一個顯示錯誤資訊的頁面網址;
$url="http://www.baidu.com";$ch = curl_init($url);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ch, CURLOPT_AUTOREFERER, 1);curl_setopt($ch, CURLOPT_NOBODY, 1);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HEADER, 1);curl_exec($ch);$aaa = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);echo $aaa;
回複內容:
使用curl擷取跳轉後網址時,如果直接設定網址能夠成功擷取到,將網址賦值給變數,在使用變數傳給curl就擷取不到
$ch= curl_init("http://www.baidu.com");curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ch, CURLOPT_AUTOREFERER, 1);curl_setopt($ch, CURLOPT_NOBODY, 1);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HEADER, 1);curl_exec($ch);$aaa = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);echo $aaa;
以上代碼能夠擷取到跳轉後的網址;下面的寫法就擷取不到,擷取到的是一個顯示錯誤資訊的頁面網址;
$url="http://www.baidu.com";$ch = curl_init($url);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ch, CURLOPT_AUTOREFERER, 1);curl_setopt($ch, CURLOPT_NOBODY, 1);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HEADER, 1);curl_exec($ch);$aaa = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);echo $aaa;
和這個是否通過變數初始化肯定是沒關係的!
我運行你兩段代碼得到的結果是一樣的,可能是特定版本的PHP或者libcurl中的問題,你可以抓包看看實際發了什麼請求出去,伺服器返回什麼。
你在測試的時候,是放在一起測試的吧,記得close上一個,版本也不會有這個問題的(至少我沒遇到過)
感謝各位的回答,由於我描述的不清晰,使大家沒有發現問題出現的原因。晚上看了一會,找到了原因。我是通過手機百度搜尋關鍵詞,然後抓取搜尋結果頁面中特定的網址,由於我是在抓取成功後把網址列印到頁面上,所以看不出網址有什麼問題,當我查看頁面源碼的時候發現連結中的&字元被替換成了&,我將&替換成&後就正常了,能夠得到想要的結果。