KRNIC data 긁어오기

저번달에 비해 KRNIC (정확하게는 kisa.or.kr 이죠) data를 가져오려다 보니, access 제한을 걸어 놓았더군요. 처음 접속했을 때 특정 쿠키가 없으면 쿠키를 set하고 reload 하도록 되어 있는데, 문제는 이걸 javascript 로 처리해 놓았다는 것 입니다. 즉 java script를 지원하지 않는 w3m, wget, links, lynx 같은 브라우저들은 접근 조차 할 수 없다는 얘기이죠.

libkrisp가 KRNIC data를 이용해서 parsing 하는 것이라서 script 화를 해 놓았는데, 이 스크립트가 작동하지 않아서 보니.. 이런 변경 사항이 있었습니다. 그래서.. 뚫을 수 있는 스크립트를 다시 만들어 보았습니다.

Class KRNIC_data { static public $useragent = 'Mozilla/4.0 ' . '(compatible; MSIE 6.0; Windows NT 5.1; ' . '.NET CLR 1.1.4322; .NET CLR 2.0.50727)'; function get ($url) { if ( false === ($cookie = self::getCookie ($url)) ) return false; if ( false === ($data = self::getPage ($url, $cookie)) ) return false; return $data; } function getPage ($url, $cookie = '') { $c = curl_init ($url); curl_setopt ($c, CURLOPT_URL, $url); curl_setopt ($c, CURLOPT_TIMEOUT, 60); curl_setopt ($c, CURLOPT_NOPROGRESS, 1); curl_setopt ($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($c, CURLOPT_USERAGENT, self::$useragent); $src = array ('!http[s]?://!', '!/.*!'); $dst = array ('', ''); $host = preg_replace ($src, $dst, $url); $header[] = 'Host: ' . $host; #$header[] = 'Excpet:'; curl_setopt ($c, CURLOPT_HEADER, 0); curl_setopt ($c, CURLOPT_NOBODY, 0); curl_setopt ($c, CURLOPT_HTTPHEADER, $header); curl_setopt ($c, CURL_FAILONERROR, 1); curl_setopt ($c, CURLOPT_SSL_VERIFYPEER, false); if ( $cookie ) curl_setopt ($c, CURLOPT_COOKIE, $cookie); $data = curl_exec($c); if ( empty ($data) ) { error_log ('Error: ' . curl_error ($c), 0); return false; } curl_close ($c); return $data; } function getCookie ($url) { $data = self::getPage ($url); preg_match ('/(_accessKey2=[^\']+)\'/', $data, $m); if ( ! trim ($m[1]) ) { error_log ('Error: Can\'t get krnic cookies => ' . $m[1], 0); return false; } return $m[1]; } } $site = 'https://ip.kisa.or.kr/ip_cate_stat/stat_05_04_toexcel.act'; echo KRNIC_data::get ($site); exit (0);


이 스크립트를 작동 하시기 위해서는 curl extension 이 필요 합니다.

Posted by 김정균

2009/12/04 18:52 2009/12/04 18:52
, ,
Response
No Trackback , 4 Comments
RSS :
http://my.oops.org/rss/response/132

Trackback URL : http://my.oops.org/trackback/132

Comments List

  1. redjade 2009/12/09 16:41 # M/D Reply Permalink

    오오오오 +_+

  2. 김정균 2010/02/23 16:22 # M/D Reply Permalink

    ㅎㅎ 쓸데 없는 행동을 한 것을 안 것인지, 이번달에 보니 풀어 버렸네요. :-)

  3. 이혜원 2010/07/23 17:17 # M/D Reply Permalink

    안녕하세요. 저도 비슷한 문제에 봉착해서 어떻게 해결하셨는지 조언 듣고 싶어서 연락드립니다.

    서버 최초 접속 시
    <html><script lang=javascript>
    document.cookie = '_accessKey2=4K0vhJlSdVkvJXFyslMRDa8MH1-L9cIG'
    window.location.reload();
    </script></html>
    코드로 리로드 시키는데, 문제는 OCX단에서 보내는 요청도 이 코드가 응답으로 와서 문제입니다.

    해당 웹서버를 우리가 관리하는게 아닌터라 어떤 단(?)에서 어떤 녀석(?)이 위 코드를 뿌려주는건지 알 수 있을까요?

    1. 김정균 2010/08/13 21:19 # M/D Permalink

      처리는 간단합니다. 해당 코드가 쿠키를 구어서 보내라는 의미이기 때문에 쿠키 데이터를 넣어서 query를 다시 보낸 것 입니다. :-)

      위 코드는 해당 웹서버가 보내주는 것일 겁니다..

Leave a comment
[로그인][오픈아이디란?]
« Previous : 1 : ... 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : ... 123 : Next »

Valid XHTML 1.0 Transitional Valid CSS 2.0!
뭘 이런걸..

뭘 이런걸..

Notices

Categories

전체 (123)
군이 (11)
주절주절 (23)
Tech (89)

Calendar

«   2010/09   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

Site Stats