php – cURL從重定向獲取url


我目前正在使用cURL嘗試從網站刮刀的重定向獲取URL.我只需要網站上的網址.我在過去幾天研究過stackoverflow和其他網站,但都沒有成功.我目前使用的代碼來自這個網站:
  $url = "http://www.someredirect.com";
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');         
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HEADER, true);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
  curl_setopt($ch, CURLOPT_NOBODY, true);
  $response = curl_exec($ch);
  preg_match_all('/^Location:(.*)$/mi', $response, $matches);
  curl_close($ch);
  echo !empty($matches[1]) ? trim($matches[1][0]) : 'No redirect found';

任何幫助將不勝感激!

最佳答案
在您的特定情況下,服務器正在檢查某些用戶代理字符串.

 

當服務器檢查用戶代理字符串時,只有當服務器看到“有效”(根據服務器)用戶代理時,它才會響應302重定向狀態代碼.任何“無效”用戶代理都不會收到302重定向狀態代碼響應或Location:標頭.

在您的特定情況下,當服務器收到來自“無效”用戶代理的請求時,它會響應200 OK狀態代碼,而響應正文中沒有文本.

(注意:在下面的代碼中,提供的實際URL已被示例替換.)

假設http://www.example.com的服務器檢查用戶代理字符串,並且http://www.example.com/product/123/重定向到http://www.example.org/abc.

在PHP中,您的解決方案是:

 

<?php

$url = 'http://www.example.com/product/123/';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0"); // Necessary. The server checks for a valid User-Agent.
curl_exec($ch);

$response = curl_exec($ch);
preg_match_all('/^Location:(.*)$/mi', $response, $matches);
curl_close($ch);

echo !empty($matches[1]) ? trim($matches[1][0]) : 'No redirect found';

  

並且,此腳本的輸出將是:http://www.example.org/abc.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM