2017-03-17 1 views
1

API를 사용하여 URL을 설정하고 모든 URL은 리디렉션되지만 리디렉션의 수와 URL은 알 수 없습니다.META 새로 고침을 포함한 CURL의 모든 리디렉션을 준수하는 방법

그래서 내가하려는 것은 경로를 추적하고 마지막 URL을 찾는 것입니다.

나는 기본적으로 동일 할 원하는 : http://wheregoes.com/retracer.php를,하지만 난 단지 내가 CURL와 함께 할 수있는 방법을 발견했습니다 마지막 URL

을 알 필요가 있지만,이 메타 새로 고침 때 추적이 중지됩니다.

나는이 스레드를 보았습니다 : PHP: Can CURL follow meta redirects하지만 많이 도움이되지 않습니다.

이 내 현재 코드입니다 : 잘

function trace_url($url){ 
    $ch = curl_init($url); 
    curl_setopt_array($ch, array(
     CURLOPT_FOLLOWLOCATION => TRUE, 
     CURLOPT_RETURNTRANSFER => TRUE, 
     CURLOPT_SSL_VERIFYHOST => FALSE, 
     CURLOPT_SSL_VERIFYPEER => FALSE, 
    )); 

    curl_exec($ch); 
    $url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 
    curl_close($ch); 

    return $url; 
} 

    $lasturl = trace_url('http://myurl.org'); 

    echo $lasturl; 
+1

메타 리디렉션을 따르는 스크립트를 작성해야합니다. 제공하신 URL은 올바른 방향으로 안내해 드리고 있습니다. 모든 메타 새로 고침을 위해 새로운 컬 요청을해야합니다. – Scriptman

+0

예, 많이 생각했습니다. 메타 새로 고침을 처리하기위한 스크립트에 대한 도움이 필요합니다. – StaalCtrl

+0

질문 [PHP : 메타 리디렉션을 따를 수 있습니까?] (http://stackoverflow.com/questions/1820705/php-can-curl-follow-meta-redirects)가 도움이되지 않습니까? 어떻게 사용 했지? – hassan

답변

0

, 3xx의 클래스와 메타 새로 고침에서 기본적으로 Header Redirects 사이에 큰 차이가 있으며, 단순히 한 가지 방법은 서버에 의존하고,에 기타 관련 클라이언트.

그리고 curl 또는 서버에서 실행되는 알려진 cURL 또는 libcurl만큼 'Header redirects'또는 http 리디렉션을 처리 할 수 ​​있습니다.

그렇다면 여러 가지 방법으로 URL을 추출 할 수 있습니다.

수동으로 처리해야합니다.

1) 웹 페이지 콘텐츠를 스크랩합니다.

2) 메타 태그에서 링크를 추출하십시오.

3) 원하는 경우이 새로운 링크를 가져옵니다. 귀하의 예제에서


:

function trace_url($url){ 
    $ch = curl_init($url); 
    curl_setopt_array($ch, array(
     CURLOPT_FOLLOWLOCATION => TRUE, 
     CURLOPT_RETURNTRANSFER => TRUE, 
     CURLOPT_SSL_VERIFYHOST => FALSE, 
     CURLOPT_SSL_VERIFYPEER => FALSE, 
    )); 

    curl_exec($ch); 
    $url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 
    curl_close($ch); 

    return $url; 
} 

$response = trace_url('http://myurl.org'); 

// quick pattern for explanation purposes only, you may improve it as you like 
preg_match('#\<meta.*?content="[0-9]*\;url=([^"]+)"\s*\/\>#', $response, $links); 

$newLink = $links[1]; 

또는 simplexml_load_file 라이브러리를 사용하는 것입니다 제공하는 솔루션에 대한 질문에서 언급 한 바와 같이

.

$xml = simplexml_load_file($response); 
$link = $xml->xpath("//meta[@http-equiv='refresh']"); 
관련 문제