외부 사이트 로그인에 대한 질문
미니님a
1개월 전
조회 202
로그인 이후 데이터를 크롤링을 해야 합니다.
해당 크롤링은 게임 운영 사이트에 협의 거쳐
승인이 떨어졌기에 합법적 크롤링이 가능한 상태임을 사전 알려드리면서...
여기 사이트가 그누보드 기반의 웹사이트인데
로그인 하는거야 뭐 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>
로그인 후 평가할 수 있습니다
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인