2014-09-16 4 views
0

여기 나는 cURL을 사용하여 웹 페이지에서 이미지를 가져 오는 기능이 있습니다. 대부분의 웹 사이트에서 작동하지만 일부 스크립트를 리디렉션하는 방법이 있습니다. 아래의 코드에서 예제로 사용 된 웹 사이트는 스크립트를 웹 페이지의 특정 페이지로 리디렉션합니다. 리디렉션을 사용하지 않거나 CURLOPT_MAXREDIRS로 제한하면 콘텐츠가 반환되지 않습니다 ... 여기서 내가 뭘 잘못하고 있니? cURL 이미지 스크레이퍼가 리디렉션됩니까?

  function curl($url){ 

       $headers[] = "User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
        rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13"; 
       $headers[] = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9, 
        */*;q=0.8"; 
       $headers[] = "Accept-Language:en-us,en;q=0.5"; 
       $headers[] = "Accept-Encoding:gzip,deflate"; 
       $headers[] = "Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.7"; 
       $headers[] = "Keep-Alive:115"; 
       $headers[] = "Connection:keep-alive"; 
       $headers[] = "Cache-Control:max-age=0"; 

       $curl = curl_init(); 
       curl_setopt($curl, CURLOPT_URL, $url); 
       curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 
       curl_setopt($curl, CURLOPT_ENCODING, "gzip"); 
       curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
       curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); 
       curl_setopt($curl, CURLOPT_COOKIESESSION, true); 
       curl_setopt($curl, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt'); 
       curl_setopt($curl, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt'); 
       //curl_setopt($curl, CURLOPT_MAXREDIRS, 1); 

       $data = curl_exec($curl); 
       //$header = curl_getinfo($curl); 

       curl_close($curl); 

       return $data; 
      } 

      $data = curl("http://www.missselfridge.com/en/msuk/product/dress-shop-299048/view-all-299126/dark-floral-panel-midi-dress-3273361"); 
      $images = array(); 
      preg_match_all('~<img.*?src=["\']+(.*?)["\']+~', $data, $images); 

      ... 
      //then for each image in images, is displayed in html. 

내 브라우저

는 헤더 @Samuel Fullman

응답 헤더는 HTTP-REFERRER가 자신의 페이지 중 하나 아니라고

CACHED_RESPONSE true 
Cache-Control max-age=0, no-cache, no-store 
Connection keep-alive 
Content-Encoding gzip 
Content-Language en-US 
Content-Length 17121 
Content-Type text/html; charset=UTF-8 
Date Tue, 16 Sep 2014 16:27:42 GMT 
Expires Tue, 16 Sep 2014 16:27:42 GMT 
Pragma no-cache 
Vary Accept-Encoding 

요청 헤더

Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding gzip, deflate 
Accept-Language en-US,en;q=0.5 
Cache-Control max-age=0 
Connection keep-alive 
Cookie ... 
Host www.missselfridge.com 
User-Agent Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0 
+0

어쩌면 당신은 긁는 도구가 환영받지 못하고 어쨌든 길을 방해하려고해서는 안된다는 표시로 받아 들여야 할 것입니다. –

+0

내 브라우저가하는 일과 다른 점은 무엇입니까? ... 난 그냥 스크립트를 통해 이미지를 수집하고 다시 사용자에게 표시하려고합니다. pintrest와 같이 웹에서 바로 이미지를 게시 할 수 있도록 스크래퍼를 사용하는 사이트가 많이 있습니다. – namenamesoseji

+0

@MarcB, 나는 질문에 답하고 무엇인가 잘못되었다는 것을 구체적으로 나타내는 다른 정보가 부족할 때 최선을 다한 다음 OP 질문에 특별히 관련되지 않은 다른 요소를 정중하게 지적합니다. 그러나 OP의 경우 저작권 및 사용에 관한 사이트의 이용 약관을 확인해야합니다. –

답변

0

그것은 가능 따라서 귀하의 액세스가 제한됩니다. 헤더에 리퍼러 값이 표시되지 않습니다.

즉, 문제를 해결할 방법이 있습니다. 분명히 작동하고 작동하지 않는 사이트가 있습니다. 작동하지 않는 사이트의 경우 브라우저에서 이미지 URL을 볼 수 있습니까? 그렇지 않으면 URL 자체가 좋지 않을 수도 있습니다 (제외하지 마세요). 가능한 경우 브라우저에서 보내고받은 헤더를 Firebug 또는 다른 응용 프로그램을 통해 비교하고 비교하십시오.

+0

내가 지금 이미지를 보려고한다는 사실을 무시하자. 내가하려는 것은 페이지를 잡아서 div에있는 함수가 가져온 데이터를 반향하여 전체 페이지를 표시하는 것입니다. 작동하는 url에서 브라우저의 페이지로 간다면 볼 수있는 모든 내용으로 동일한 URL이 반환됩니다. 작동하지 않는 URL의 경우 매번 리디렉션 페이지 인 것처럼 보이는 페이지가 표시됩니다. 위에서 말한 것처럼 리디렉션을 제한하면 콘텐츠가 없습니다. 리디렉션을 중지하고 콘텐츠가 정상적으로 표시되도록하려면 무엇을 할 수 있습니까? – namenamesoseji

+0

HTML 페이지/URL을 원할 경우에는 URL을 입력하고 입력하기 만하면 리퍼러가 필요합니다. 나는 전형적으로 명령 행에서 curl을 exec()하고 -I (show headers)를 사용하는 것에 익숙하다. 궁극적으로 당신은 브라우저가 귀하의 말머리 기능이 없다는 것을 알아 내야합니다. –

+0

나는 http://www.missselfridge.com/en/msuk/product/dress-shop-http : 299048/view-all-299126/dark-floral-panel-midi-dress-3273361 리디렉션되는 페이지입니다. 나는 여전히 전체 HTTP 헤더에 대한 이해를 얻으려고 노력하고 있으므로 확실하지 않다. – namenamesoseji