[ php ] [ class ] Snoopy.class.php 를 이용하여 파일 긁어오기 > php

본문 바로가기
사이트 내 전체검색

php

[ php ] [ class ] Snoopy.class.php 를 이용하여 파일 긁어오기

페이지 정보

작성자 웹지기 댓글 0건 조회 6,470회 작성일 18-09-30 05:04

본문

사이트를 긁어오기를 하다보면  fsockopen(): unable to connect to 라는 에러가 나면서 사이트 긁어오기가 되지 않는 경우가 종종있다. 

특히 외국 사이트중에 그런 곳이 많다. 사이트를 방문하지 않고 내용만 쏙 빼가는게 탐탁치 않아서 막아 놓은경우도 있고, 국가적인 차원에서 차단을 시킨경우도 있다.

예를 들어 , 일본 최대 AV 회사중에 하나인 DMM은 한국에서 들어오는 방문자를 차단시켜놓았다. 실제로 AV를 구매하지도 않으면서 트래픽은 엄청나게 잡아 먹기 때문이다. 

또 다른예로 , 미국 국가 기관들중에는 미국에서 접속하지 않으면 페이지에 접근할수도 없는곳들이 있다. 재미있는건 웹브라우져를 열어서 보면 열리는데, 스누피로 긁어올려고 하면 안된다는 점이다.

 

현재 내가 발견한 사이트 긁어오기가 안되는 사이트의 유형은 세가지다. 세션을 물고 들어가야지만 페이지가 열리는 경우와 자기 자신의 도메인에서 오지 않을 경우 정상적인 접근이 아니라고 하는 경우 , 그리고 특정 국가의 아이피를 아예 차단시킨경우다.

 

1. 세션을 물고 들어가야 하는 경우

이 경우는 사이트 관리자가 임의로 막아놓은 경우다. 로봇이 아닌 사람이 직접 들어와야만 접근이 가능하게 하기 위해서다. 

웹브라우져로 직접 주소를 클릭하고 들어와야만 페이지가 열린다. 이 경우에는 보통 세션을 임의로 먹여서 차단하는데.. 스누피에서 세션을 강제로 먹여주면 된다.

사용법은 간단하다. 스누피 fetch 하기전에 아래와 같이 세션값을 임의로 먹여준다.


$snoopy->cookies["SessionID"] = 세션값;

물론, 사이트에서 사용하는 세션변수를 찾아내야한다. 사실 세션변수라기 보다 쿠키값이다. 자바스크립트로 생성해서 쓰는 경우가 많기 때문에 

사이트의 소스를 면밀히 관찰하면 대충 세션변수와 넣어야하는 값을 알아 낼 수가 있었다. 불가능한 경우도 있지만 내 경험상 왠만한곳은 다 가능했다.

 

2. 자기 자신의 도메인으로 부터 들어오지 않으면 막아버리는 경우

보통 페이지가 아이프레임으로 구성된경우 이런 경우가 많았다. 아마도 외부에서 아이프레임안의 내용만 링크해서 가져가지 못하도록 하기 위해서가 아닌가 한다.

위와 마찬가지로 fetch 하기전에 아래와 같이 값을 먹여준다.

$snoopy->referer = “접속한 도메인";

이 방법은 자기가 어디서 왔는지 숨길때도 유용하다. 접속한 도메인을 naver.com으로 한다면, 상대방 로그기록에는 네이버에서 방문한것처럼 보일것이다. 

 

3. 외국 사이트가 한국 ip를 아예 차단한 경우

우리나라 정부에서 차단할때도 있고 , 외국에서 한국을 차단할때도 있다. 두 경우다 우회경로를 통하면 접근할수 있다. 우회경로를 프록시라고 부른다. 

바로 가는게 아니라 다른곳을 들렀다가 가는것이기 때문에 속도는 조금 느리다.

프록시서버들 중에 유료도 있고 무료도 있는데, 왠만한곳은 무료로 가능하다. 아래는 무료프록시 서버를 보여주는 사이트들이다. 

http://nntime.com/proxy-country/United-States-01.htm

www.cybersyndrome.net/plr5.html

 

위 사이트들에서 좋은 프록시 서버를 찾았으면 아래와 같이 세팅해준다.

$snoopy->proxy_host = “프록시서버"; 

$snoopy->proxy_port = "프록시 서버 포트번호";

 

무료프록시를 쓰다보면 아래 에러가 뜰때가 있다.

You are trying to use a node of the CoDeeN CDN Network. Your IP address is not recognized as a valid PlanetLab address, so your request rate is being limited. ...

에러가 한번뜨면 같은 프록시로는 더 이상 접근이 안된다. 원인은 프록시서버가 결국은 트래픽을 토스해서 우리쪽으로 넘겨주는데, 너무 과도하게 토스를 시킬때 나는 에러다. 한마디로 너무 혹사를 시켜서 니 아이피와는 더이상 못해먹겠다는 것이다.

이럴때는 다른 프록시서버로 변경해주면 되지만, 매번 그럴수도 없는 노릇이다. 유료를 쓰거나 자동으로 무료프록시를 변경해주게 설정해줘야한다.

 

 

이상이다. 외국 사이트에서 주기적으로 자료를 받아와야하는 노가다가 있을때.. 위와 같은 방법으로 해봄직하다. 노가다는 컴퓨터에게 시키시고 자네는 영화나 한편 다운받아 보는게 어떠한가?

추천0 비추천0

댓글목록

등록된 댓글이 없습니다.

Total 82건 4 페이지
  • 37 [ php ] 쿠폰발행
  • DB[code]CREATE TABLE `coupon_test` ( `idx` int(11) NOT NULL auto_increment, `couponNO` varchar(16) NOT NULL, `ID` varchar(20) default NULL, PRIMARY KEY (`idx`)) ENGINE=MyISAM DEFAULT CHARSET=euckr AUTO_INCREMENT=1 ;[/code]idx: 고유 인덱스 번호couponNO: 쿠폰번호 (중복불가 varchar(16) 숫자와 알파벳으로 이...
  • 웹지기 09-27 5064 0 0 댓글 0
  • 35 [ php ] [ class ] 쿠폰발행 class 버젼
  • DB[code]CREATE TABLE `coupon_test` ( `couponNO` varchar(16) NOT NULL default '', `ID` varchar(20) NOT NULL default '', `datetime` datetime NOT NULL default CURRENT_TIMESTAMP, PRIMARY KEY (`couponNO`)) TYPE=MyISAM;[/code]쿠폰생성 소스[code]<?// Mysql 클래스class TMySql { var $...
  • 웹지기 09-27 3492 0 0 댓글 0
  • 32 [ php ] php 로 소켓 서버 작성하기
  • PHP로 소켓 서버 작성하기작성자 김영진(cogolda@hanmail.net)대상 독자요구사항1 개요 - 소켓 서버란 무엇인가?1.1 소켓의 형태2 PHP 소켓 함수2.1 PHP에서 소켓 만들기2.2 실용 서버 만들기2.3 실용적인 예2.4 보안가능한 기능 추가와 확장저자에 관해알아두기이 자료는 http://www.zend.com/zend/tut/tutorial-staub3.php/에 있는Writing Socket Servers in PHP를 제가 허접번역 및 내용을 추가 및 생략한 것입니다.이미...
  • 웹지기 09-27 19718 0 0 댓글 0
  • 30 [ php ] 파일 확장자 구하기 여러가지 방법
  • [code] <?php $filename = "mypage.asp"; //1 strrchr함수를 사용해서 확장자 구하기 $ext = substr(strrchr($filename, '.'), 1); echo$ext; echo"<br>"; //2 strrpos 함수와 substr함수를 사용해서 확장자 구하기 $ext = substr($filename, strrpos($filename, '.') + 1)...
  • 웹지기 09-19 16511 0 0 댓글 0
  • 29 [ php ] php를 활용하여 리눅스 계정 만들기
  • 1. 먼저, /usr/sbin/useradd를 웹 서비스 디렉토리에 복사[code] #cp /usr/sbin/useradd /usr/www/html/[/code] (웹 서비스 디렉토리는 리눅스에 따라 약간의 차이가 있을 수 있슴) 2. 복사한 useradd의 setid를 설정합니다 (물론 /usr/www/html의 위치에서 명령을 내림 )[code] #chmod a+s useradd [/code] 3. php소스 (소스파일은 웹 서비스 디렉토리에 있어야 함)[code] #vi ...
  • 웹지기 09-19 4743 0 0 댓글 0
  • 28 [ php ] PREG 한글 특수문자 체크 & 추출
  • 홍길1234동abc입!!_#니다 라는 문구가 있다고 했을때 해당 문구에서 홍길동입니다 1234 abc !!_# 를 각각 추출해내는 함수이다. euckr을 기준으로 작성된 함수이며 euckr에서는 한글 패턴의 추출이 어려운 관계로 UTF-8로 전환하여 변환하는 형태이다. 핵심은 1 한글,2 영문 ,4 숫자 ,8 특수기호로 명시하고 처리하는 식이다. ========= 내용 ============== $msg = "홍길1234동abc입!!_#니다"; ...
  • 웹지기 09-19 8484 0 0 댓글 0
  • 27 [ php ] ereg_replace // eregi_replace 사용법
  • ereg_replace는 str_replace와 형식은 같으나, 정규식을 사용한다는 점이 다르다. $a = "1a2b3"; $a = ereg_replace("[a-z]", "x", $a); echo $a; eregi_replace는 ereg_replace와 형식은 같으나 대소문자를 구분하지 않는다는 점이 다릅니다. $a = "1AB"; $a = ereg_replace("[a-z]", ...
  • 웹지기 09-19 4307 0 0 댓글 0
  • 25 [ php ] facebook sharer를 이용할 경우 부가 메타데이터 넣는 방법
  • 페이스북 쉐어러를 사용할때는 http://www.facebook.com/sharer/sharer.php?u=공유할 url 만 입력하면 된다. 하지만, 해당 URL에 대한 대표 이미지나, 설명같은 것은 무작위 또는 가장 강조되는 테그를 가져오기때문에 목적이 그냥 특정 URL을 공유하는 것이라면 상관없지만 이게아니라면 의도치않은 결과가 나올 수 있다. 이런 부분을 해소하기 위해서 페이스북에서는 메타데이터를 이용해 특정 정보를 가져온다. 추가할 수 있는 메타 데이터들에는 url,...
  • 웹지기 09-19 15245 0 0 댓글 0
  • 24 [ php ] _SERVER, getenv 환경변수
  • PHP 환경변수 정리 서버 변수 용도$_SERVER['PHP_SELF'] 현재 실행하고 있는 스크립트의 파일명 DocumentRoot로부터 취득$_SERVER['argv'] 스크립트에 받은 인수의 배열$_SERVER['argc'] 스크립트에 받은 인수의 수$_SERVER['GATEWAY_INTERFACE'] 서버가 사용하고 있는 CGI 의 버전$_SERVER['SERVER_ADDR'] 현재의 스크립트가 실행되고 있는 서버의 IP 어드레스$_SERVER['SERVER_NAME'] 현재의 스크립트가 ...
  • 웹지기 09-11 7284 0 0 댓글 0
  • 23 [ php ] Class 사용법 정리 7. 매직함수
  • 7매직함수__sleep, __wakeup과같이"__"로시작하는매직함수(magic function)는 PHP 클래스내에서특수한목적으로사용됩니다.따라서이함수들이가지고있는문서화된매직기능을사용할필요가없다면클래스내에이함수들을정의해서는안됩니다.__sleepserialize 함수를통해객체를직렬화할때해당클래스에매직함수 __sleep가정의되어있는지확인합니다.만약정의되어있다면객체를직렬화하기전에 __sleep 함수를수행합니다.이함수는직렬화하기전에객체멤버에대하여조작해야하는작업,또는직렬화하기전에미리수행...
  • 웹지기 09-11 4090 0 0 댓글 0
게시물 검색

회원로그인

접속자집계

오늘
3,061
어제
7,449
최대
33,828
전체
8,400,233

그누보드5
Copyright © funyphp.com. All rights reserved.