안녕하세요. 오늘은 curl 라이브러리에서 curl_easy_setopt() 함수의 옵션에 대해서 정리하고자합니다.
그 중에서 옵션값을 TRUE/FALSE 로 할 수 있는 것들만 모아봤습니다.
CURLOPT_AUTOREFERER
TRUE로 설정하면 리퀘스트 후 Location: 헤더를 받아 다른 URL에 요청할 때 이전 URL을 Referer: 헤더에 추가해준다.
CURLOPT_BINARYTRANSFER
TRUE로 설정하면 CURLOPT_RETURNTRANSFER 옵션을 사용했을 때 서버의 전송 결과가 NULL로 끝나는 문자열이 아닌 바이너리 데이터로 취급된다.
원래는 위와 같은 역할을 하는 옵션이나 최근에는 항상 binary-safe한 결과를 돌려주므로 사용할 필요가 없다. 최근의 PHP trunk 소스를 살펴보면 하위 호환성 유지를 위해 남아있으며 실제로 아무 일도 하지 않는다.
CURLOPT_COOKIESESSION
TRUE로 설정하면 새로운 세션으로서 쿠키를 다룬다. 기본적으로 libcurl은 서버가 내려준 쿠키가 세션 쿠키든 일반 쿠키든 상관하지 않고 모두 동등하게 취급한다. 세션 쿠키란 만료 시간을 지정하지 않아 브라우저를 닫을 때 사라지는 쿠키를 말한다.
즉, CURLOPT_COOKIEJAR 옵션을 사용해 파일에 쿠키를 저장하고 CURLOPT_COOKIEFILE 옵션으로 이 쿠키를 불러다 사용할 때 CURLOPT_COOKIESESSION 옵션을 주면 만료 시간이 없는 쿠키는 불러오지 않는다. 마치 브라우저를 닫았다 새로 연 것 처럼 세션쿠키를 무시할 수 있다.
CURLOPT_CERTINFO
TRUE로 설정하면 SSL 인증서와 관련된 정보를 STDERR로 표시해준다. CURLOPT_VERBOSE 옵션을 TRUE로 설정해야 동작한다. (PHP 5.3.2 버전에서 추가됨)
CURLOPT_CRLF
TRUE로 설정하면 FTP 업로드시 본문의 유닉스 줄바꿈 문자(LF)를 CRLF 줄바꿈으로 변경해 전송한다.
CURLOPT_DNS_USE_GLOBAL_CACHE
기본적으로 TRUE로 설정되어 있으며 글로벌 DNS 캐시를 사용한다. 이 캐시 정보는 한 프로세스 안에서만 유효하다. 이 캐시 정보는 thread-safe 하지 않다.
CURLOPT_FAILONERROR
TRUE로 설정하면 HTTP 응답이 400 이상일 때 응답 내용을 가져오지 않고 실패로 취급한다. 그렇게 되면 curl_exec() 함수에서는 FALSE를 리턴한다.
CURLOPT_FILETIME
TRUE로 설정하면 서버에서 응답하는 Last-Modified: 헤더의 시각을 읽어서 저장해둔다. 이 시각은 curl_getinfo() 함수에서 CURLINFO_FILETIME 옵션으로 읽어올 수 있다.
CURLOPT_FOLLOWLOCATION
TRUE로 설정하면 서버에서 Location: 헤더를 응답했을 때 그 주소로 다시 요청을 시도한다. 이 작업은 재귀적으로 이루어지며 CURLOPT_MAXREDIRS 값이 세팅되어 있지 않으면 Location: 헤더가 나올때마다 계속 따라 이동하게 된다.
CURLOPT_FORBID_REUSE
TRUE로 설정하면 리퀘스트 후 커넥션을 명시적으로 종료한다. 일반적으로는 사용된 커넥션의 접속을 끊지 않고 내부적으로 유지하고 있지만 이 옵션을 사용하면 즉시 접속을 종료시킨다. 정확한 동작을 이해하지 못한다면 사용에 주의해야 한다.
CURLOPT_FRESH_CONNECT
TRUE로 설정하면 이미 캐시된 커넥션을 사용하지 않고 새로운 커넥션을 생성해 사용한다. 새로 커넥션이 생성되면서 커넥션 풀이 가득 차는 경우 풀링된 커넥션 중 하나가 종료될 수 있다. 정확한 동작을 이해하지 못한다면 사용에 주의해야 한다.
CURLOPT_FTP_USE_EPRT
TRUE로 설정하면 Active 모드의 FTP 서버에서 다운로드를 할 때 EPRT, LPRT 명령을 사용한다. FALSE로 설정하면 대신 PORT 명령을 사용한다.
CURLOPT_FTP_USE_EPSV
TRUE로 설정하면 FTP 전송시 먼저 EPSV 명령을 시도하고 실패하면 PASV 명령을 실행한다. FALS로 설정하면 EPSV 명령을 사용하지 않는다.
CURLOPT_FTP_CREATE_MISSING_DIRS
TRUE로 설정하면 FTP 작업 중 존재하지 않는 디렉토리에 대해 작업하려고 할 때 자동으로 디렉토리를 생성한다.
CURLOPT_FTPAPPEND
TRUE로 설정하면 FTP 업로드를 할 때 파일을 덮어쓰는 대신 이어 올리기를 한다.
CURLOPT_FTPASCII
CURLOPT_TRANSFERTEXT 옵션과 같은 일을 하는 다른 이름의 옵션이다. CURLOPT_TRANSFERTEXT 옵션을 쓰는걸 권장한다.
CURLOPT_FTPLISTONLY
TRUE로 설정하면 FTP URL을 불러올 때 파일의 부가정보를 제외한 파일/디렉토리명만 보여준다.
CURLOPT_HEADER
TRUE로 설정하면 출력 결과에 헤더 정보를 포함해 보여준다.
CURLINFO_HEADER_OUT
TRUE로 설정하면 요청하는 헤더 정보를 나중에 curl_getinfo() 함수에서 CURLINFO_HEADER_OUT 옵션으로 읽어올 수 있다. CURLINFO_ 접두어는 의도적으로 다르게 붙인 것이라고 한다. (PHP 5.1.3 버전에서 추가됨)
CURLOPT_HTTPGET
TRUE로 설정하면 기본 요청 메소드를 GET으로 변경한다. 기본 요청 메소드는 GET이 기본 값이므로 이 옵션은 요청 메소드가 변경되었을 때만 필요할 것이다.
CURLOPT_HTTPPROXYTUNNEL
TRUE로 설정하면 CURLOPT_PROXY 옵션에 설정된 프록시를 통해 터널링 하게 된다.
CURLOPT_MUTE
TRUE로 설정하면 cURL 관련 함수들의 출력을 모두 차단한다.
CURLOPT_NETRC
TRUE로 설정하면 원격 사이트에 접속할 때 사용자 이름과 비밀번호를 ~/.netrc 파일에서 읽어 사용한다.
CURLOPT_NOBODY
TRUE로 설정하면 출력 결과에서 바디 부분을 제외한다. 전송받은 결과에서 바디 부분을 무시하는게 아니고 요청 메소드를 HEAD로 전송해 본문을 전송받지 않는다. 요청 후에 이 옵션을 FALSE로 변경해도 이후 요청은 계속 HEAD 메소드를 사용하게 되므로 CURLOPT_HTTPGET 등의 옵션을 이용해 원하는 메소드로 설정해줘야 한다.
CURLOPT_NOPROGRESS
기본적으로 TRUE로 설정되어 있으며 전송 상태를 표시하지 않도록 한다.
CURLOPT_NOSIGNAL
TRUE로 설정하면 PHP 프로세스로 보내지는 시그널을 모두 무시한다. 멀티 스레드 SAPI 환경에서는 자동으로 TRUE로 설정되므로 타임아웃 옵션의 사용 가능 하다. (cURL 7.10 버전에서 추가됨)
CURLOPT_POST
TRUE로 설정하면 POST 전송을 수행한다. HTML 폼에서 일반적으로 쓰이는 application/x-www-form-urlencoded 방식으로 전송한다.
CURLOPT_PUT
TRUE로 설정하면 PUT 파일 전송을 수행한다. 전송할 파일은 CURLOPT_INFILE, CURLOPT_INFILESIZE 옵션을 통해 지정해야 한다.
CURLOPT_RETURNTRANSFER
TRUE로 설정하면 curl_exec() 함수를 실행했을 때 전송 결과를 바로 출력시키지 않고 리턴 값으로 넘겨받게 된다.
CURLOPT_SSL_VERIFYPEER
FALSE로 설정하면 원격 서버의 인증서가 유효한지 검사하지 않는다. CURLOPT_CAINFO 옵션으로 대체할 인증서를 지정하거나 CURLOPT_CAPATH 옵션으로 인증서 디렉토리를 지정할 수 있다. 기본값은 TRUE이다. (cURL 7.12.2 버전에서 추가됨)
CURLOPT_TRANSFERTEXT
TRUE로 설정하면 FTP 전송에서는 ASCII 모드를 사용하고 LDAP 전송에서는 HTML 대신 텍스트 형식으로 전송한다. 윈도우즈 환경에서 STDOUT은 바이너리 모드로 설정되지 않는다.
CURLOPT_UNRESTRICTED_AUTH
TRUE로 설정하면 CURLOPT_FOLLOWLOCATION 옵션을 사용해 다른 주소를 호출할 때도 설정된 사용자 이름과 비밀번호를 전송한다. 다른 호스트명을 가진 주소라 할 지라도 전송된다.
CURLOPT_UPLOAD
TRUE로 설정하면 PUT 파일 전송을 수행한다. HTTP 전송의 경우 CURLOPT_PUT 옵션과 같다고 볼 수 있지만 그 외의 프로토콜에서는 이 옵션을 사용해야 업로드를 할 수 있다.
CURLOPT_VERBOSE
TRUE로 설정하면 전송 과정에 대한 자세한 정보를 출력한다. 이 내용은 STDERR를 통해 출력되는데 CURLOPT_STDERR 옵션을 통해 다른 스트림으로 출력할 수 있다.
오늘의 포스팅은 여기까지 하겠습니다. 다음편에서 curl_easy_setopt() 함수 옵션에 마무리를 짓겠습니다.
감사합니다.
'프로그래밍 > C' 카테고리의 다른 글
[C] _AT_ 키워드 (0) | 2018.08.01 |
---|---|
[C]curl 라이브러리 curl_easy_setopt() 옵션 정보(2) (0) | 2018.05.30 |
[C] 컴파일 과정 (0) | 2018.03.31 |
[C]fopen, fclose 함수란? (0) | 2018.01.03 |
[C]C언어 포인터 배열과 배열 포인터의 차이 (0) | 2017.09.15 |