꿈을 바구니에 담아 간직하다 보면!!

지금 참 힘들죠? 근데 내일은 지금보다 덜 힘들거예요

힘든 건 오늘만이 아니다. 내일도, 그리고 그 다음 날도 계속될 것이다.

PHP Tip

외부사이트 가져오기 curl 기본 설명 파싱(parsing)

duaidot 2025. 12. 20. 14:13

function curl($url) {
    // 시스템 임시 폴더에 임시 쿠키 파일 생성 (세션 유지용)
    $cookieFile = tempnam(sys_get_temp_dir(), 'cookie'); // 임시 쿠키 파일 생성
    
    // cURL 세션 초기화
    $ch = curl_init();

    // 요청을 보낼 URL 설정
    curl_setopt($ch, CURLOPT_URL, $url);
    // 실행 결과를 바로 출력하지 않고, 문자열로 반환하도록 설정
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // 서버에게 보낼 User-Agent 헤더 설정 (브라우저인 척하기 위해)
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36');
    // 추가 HTTP 헤더들 설정
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        // 어떤 종류의 응답을 받아들일지 명시
        'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        // 선호하는 언어 설정
        'Accept-Language: en-US,en;q=0.5',
        // 연결 유지 옵션
        'Connection: keep-alive',
        // HTTPS 아닌 요청에서 HTTPS로 업그레이드 요청(브라우저가 주로 보내는 헤더)
        'Upgrade-Insecure-Requests: 1'
    ));
    // 서버에서 보낸 리다이렉트(301, 302 등)를 자동으로 따라가도록 설정
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    // 서버에서 내려보내는 쿠키를 저장할 파일 지정
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
    // 요청 보낼 때 이 쿠키 파일을 사용하도록 설정
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);
    // SSL 인증서 검증 비활성화 (보안상 좋지 않지만, 테스트용으로 종종 사용)
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // SSL 검증 비활성화, 보안상 주의
    // 최대 실행 시간(초) 설정. 30초 안에 응답 없으면 중단
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    // 설정된 옵션으로 실제 HTTP 요청 실행
    $response = curl_exec($ch);

    // 요청 중 에러 발생 여부 확인
    if (curl_errno($ch)) {
        // 에러가 있으면 에러 메시지 출력
        echo 'cURL error: ' . curl_error($ch);
    } else {
        // 에러 없으면 응답 내용 반환 (HTML 소스 등)
        return $response;
    }

    // cURL 세션 종료 (자원 해제)
    curl_close($ch);
    // 사용했던 임시 쿠키 파일 삭제
    unlink($cookieFile); // 쿠키 파일 삭제
}

// 아래는 사용 예시 (현재는 주석 처리된 상태)

// 크롤링할 URL 정의 예시
// $url = 'https://naver.com';

// 직접 만든 curl 함수 대신 getContent라는 다른 함수 테스트를 했던 흔적 (현재는 없음)
// $content = getContent($url);
// echo $content;

// curl 함수에 URL을 넣어 호출하는 예시
// $url = $url;
// $response = curl($url);

// 응답 내용(HTML)을 화면에 출력
// echo $response;