외부 사이트 로그인에 대한 질문

외부 사이트 로그인에 대한 질문

QA

외부 사이트 로그인에 대한 질문

그누보드5(영카트) 버전

5.6.22

본문

로그인 이후 데이터를 크롤링을 해야 합니다.

해당 크롤링은 게임 운영 사이트에 협의 거쳐

승인이 떨어졌기에 합법적 크롤링이 가능한 상태임을 사전 알려드리면서...

 

여기 사이트가 그누보드 기반의 웹사이트인데

로그인 하는거야 뭐 post 로 보내면 그렇다쳐도 

로그인 유지를 할려면 session 을 가져와야 하는데 이게 방법이 있나요 ??

 

혹은 그 사이트에 로그인을 유지 하는 방법의 노하우가 있다면 공유 해주시면 좋겠습니다.

이 질문에 댓글 쓰기 :

답변 3

세션아이디를 미리 만들어서 첫 curl에서 쿠키 굽고 curl보낼때마다 같은 세션아이디를 보내서 유지합니다.



if(!function_exists('wv_parse')){
    function wv_parse($url, $post_data = '', $add_header = array(), $attempt = 1, $session_id = '' , $use_cookie = false, $dest_file=''){

        if($dest_file){


            $fp = fopen($dest_file, 'wb');

            if(!$fp){
                return array(
                    'result' => false,
                    'content' => 'fopen 실패',
                    'last_url'=> $url
                );
            }
        }

        $parse_url = parse_url($url);
        $host      = $parse_url['scheme'].'://'.$parse_url['host'];
        $referer   = $host.$parse_url['path'];
        $headers = array();
        $headers[] = "Referer: $referer";
        $headers[] = 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36';
        $headers[] = 'x-requested-with: XMLHttpRequest';

        if(is_array($add_header) and count($add_header)){

            $headers = array_merge($headers,$add_header);
        }

        if($post_data){
            if(is_array($post_data)){
                $post_field_string = http_build_query($post_data, '', '&');
            }else{
                $headers[] = 'Content-Type: application/json';
                $post_field_string = $post_data;
            }

        }


        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_TIMEOUT,10);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,3);

        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

//        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
        curl_setopt($ch, CURLOPT_VERBOSE, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

        if($session_id) {
            curl_setopt($ch, CURLOPT_COOKIESESSION, true);
            curl_setopt($ch, CURLOPT_COOKIE,   session_name() . '=' . $session_id);
            $use_cookie=true;
        }

        if($use_cookie){
            (G5_DATA_PATH.'/cookie', G5_DIR_PERMISSION);
            @chmod(G5_DATA_PATH.'/cookie', G5_DIR_PERMISSION);
            $cookieFile =  G5_DATA_PATH.'/cookie/'.$parse_url['host'].".cookie";
            curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
            curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);
        }

        if($post_data){
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post_field_string);       //POST data
        }

        if($dest_file){
            curl_setopt($ch, CURLOPT_FILE, $fp);
        }

        $curl_result = curl_exec ($ch);
        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $error_message = curl_error( $ch );
        $last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
        curl_close ($ch);

        if($error_message and $attempt<3){
            return wv_parse($url, $post_data, $add_header, $attempt+1, $session_id , $use_cookie, $dest_file);
        }

        if($dest_file){
            fclose($fp);
            if(filesize($dest_file)){
                return array(
                    'result' => true,
                    'content' => $dest_file,
                );
            }
        }



        return array(
            'result' => $error_message?false:true,
            'content' => $error_message?$error_message:$curl_result,
            'last_url'=> $last_url,
            'code'=>$code,
            'cookie'=>$use_cookie?$cookieFile:null
        );
    }
}



$temp_sess_id = '64dc4c92140cb';

$result = wv_parse('도메인/login','','','',$temp_sess_id);

답변을 작성하시기 전에 로그인 해주세요.
전체 129,672 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT