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

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

미니님a 1개월 전 조회 201

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

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

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

 

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

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

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

 

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

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

답변 3개

세크티
1개월 전

세션아이디를 미리 만들어서 첫 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>

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

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

1개월 전

파이썬으로 하면 됩니다 

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

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

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

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

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

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

로그인