테스트 사이트 - 개발 중인 베타 버전입니다

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

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

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

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

 

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

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

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

 

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

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

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

</p>

<pre>
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){
            @mkdir(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
        );
    }
}
</pre>

<pre>
$temp_sess_id = '64dc4c92140cb';

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

<p>

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

파이썬으로 하면 됩니다 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

간장게장같은남자

저는 그냥 python selenium 으로 브라우저에서 직접적으로 로그인시키고 처리하게 합니다 ㅋㅋ

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인

전체 질문 목록

🐛 버그신고