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 김정균


