PHP CURL 컨텍스트 옵션이란?
PHP에서 CURL 컨텍스트 옵션은 CURL 확장 모듈이 --with-curlwrappers 설정 옵션과 함께 컴파일되어 있을 때 사용할 수 있는 스트림 컨텍스트 옵션입니다. 이 옵션들을 활용하면 file_get_contents(), fopen() 같은 파일 시스템 함수를 통해서도 HTTP 요청 방식, 헤더, 프록시, SSL 검증 등 세부적인 네트워크 동작을 제어할 수 있습니다.
아래 표는 CURL 래퍼(wrapper)에서 지원하는 주요 컨텍스트 옵션을 정리한 것입니다.
CURL 래퍼 컨텍스트 옵션 목록
| 옵션 | 설명 |
|---|---|
| method | 원격 서버가 지원하는 HTTP 메서드를 지정합니다. 기본값은 GET입니다. |
| header | 요청 시 함께 전송할 추가 헤더를 지정합니다. |
| user_agent | User-Agent: 헤더로 전송될 값을 설정합니다. |
| content | 헤더 이후에 전송할 추가 데이터를 지정합니다. 이 옵션은 GET 또는 HEAD 요청에는 적용되지 않습니다. |
| proxy | 프록시 서버의 주소를 나타내는 URI를 지정합니다. |
| max_redirects | 따라갈 리디렉션(redirect)의 최대 횟수를 설정합니다. 기본값은 20입니다. |
| curl_verify_ssl_host | 호스트(host)의 유효성을 검증합니다. 기본값은 FALSE이며, http와 ftp 프로토콜 래퍼 모두에서 사용할 수 있습니다. |
| curl_verify_ssl_peer | 사용된 SSL 인증서에 대한 검증을 요구합니다. 기본값은 FALSE이며, http와 ftp 프로토콜 래퍼 모두에서 사용할 수 있습니다. |
활용 예제
실제 코드에서는 stream_context_create() 함수로 컨텍스트를 생성한 뒤 파일 관련 함수에 전달하여 사용합니다.
<?php
$options = [
'http' => [
'method' => 'POST',
'header' => "Content-Type: application/json\r\n",
'user_agent' => 'MyApp/1.0',
'content' => json_encode(['name' => 'test']),
'max_redirects' => 10,
]
];
$context = stream_context_create($options);
$result = file_get_contents('https://example.com/api', false, $context);
?>참고 사항
curl_verify_ssl_host와 curl_verify_ssl_peer 옵션은 기본적으로 비활성화(FALSE)되어 있어 SSL 인증서 검증이 생략됩니다. 운영 환경에서는 보안상의 이유로 가능한 한 인증서 검증을 활성화하는 것이 좋습니다. 또한 이러한 CURL 래퍼 기반 옵션은 환경에 따라 지원 여부가 달라질 수 있으므로, 사용 전 서버의 PHP 설정에서 CURL 확장이 --with-curlwrappers 옵션으로 빌드되었는지 확인하는 것이 안전합니다.