curl은 URL을 통해 데이터를 전송하는 데 사용되는 명령줄 도구이자 라이브러리입니다. 웹 개발 환경에서 curl은 사용자가 명령줄이나 스크립트를 통해 웹사이트나 API 같은 다양한 인터넷 리소스에 직접 요청을 보내고 상호작용할 수 있게 합니다.
curl은 HTTP, HTTPS, FTP, FTPS 등 다양한 프로토콜을 지원하여 파일 전송, 데이터 검색, API 통합과 같은 작업에 매우 다재다능합니다. 복잡한 작업을 처리하고 다양한 유형의 요청을 보낼 수 있는 curl의 능력은 애플리케이션과 원격 서버 간의 원활한 통신을 가능하게 하는 필수 도구로 자리매김했습니다. 그 유연성과 사용 편의성은 현대 웹 개발 워크플로우의 핵심 구성 요소로 만들었습니다.
GET 요청은 웹 서버의 지정된 리소스에서 정보나 데이터를 검색하도록 설계된 웹 통신에서 핵심적인 구성 요소입니다. 이 튜토리얼에서는 PHP를 사용하여 curl로 GET 요청을 수행하는 방법을 배웁니다.
GET 요청이란?
GET 요청은 웹 서버의 지정된 리소스에서 정보나 데이터를 가져오기 위해 설계된 HTTP 메서드입니다. 예를 들어, 웹 브라우저에 URL을 입력하고 엔터 키를 누르면 GET 요청이 발생합니다. 브라우저는 서버에 GET 요청을 보내고, 브라우저에 표시되는 웹 페이지를 반환합니다.
GET 요청의 목적은 HTML 페이지, 이미지, 문서 또는 API 데이터 등 특정 리소스를 서버에 요청하는 것입니다. GET 요청의 단순성은 그 메서드에 있습니다. 이는 항등 연산(idempotent operation)으로, 서버 상태나 요청된 리소스의 상태를 변경하지 않아야 합니다. GET 요청은 읽기 전용이며, 일반적으로 데이터를 전송하거나 서버를 변경하는 것을 포함하지 않습니다. 주요 기능은 데이터 검색입니다.
GET 요청은 또한 URL에 쿼리 매개변수라고 알려진 키-값 쌍을 추가하는 것을 지원합니다. 쿼리 매개변수를 사용하면 정확히 원하는 내용을 지정할 수 있습니다. 예를 들어, 검색 엔진에서 무언가를 검색할 때 입력한 쿼리는 일련의 매개변수로 구성되어 검색 엔진 서버로 GET 요청을 통해 전달됩니다. 서버는 이러한 매개변수를 처리하고 관련 검색 결과를 검색하여 응답으로 반환하며, 이는 웹 브라우저에 표시됩니다.
GET 요청은 데이터를 URL에 노출시키므로, URL을 볼 수 있는 누구나 매개변수를 확인할 수 있다는 점에서 민감하거나 기밀 정보를 전송하는 데 적합하지 않다는 점을 유의해야 합니다.
PHP에서 curl을 사용한 GET 요청 구현
이 섹션에서는 PHP 애플리케이션 내에서 curl 세션 초기화, URL 및 기타 특정 옵션 설정, 특정 매개변수 설정, 원격 리소스에 대한 요청 전송, 응답 처리를 배우게 됩니다.
따라하기 위해서는 PHP 버전이 curl을 지원하는지 확인해야 합니다. 대부분의 최신 PHP 설치에는 curl이 기본적으로 활성화되어 있지만, 항상 확인하는 것이 좋습니다. phpinfo() 함수를 사용하여 PHP 버전과 구성을 확인할 수 있습니다. 이를 위해 php-curl이라는 폴더를 생성하고, 그 안에 info.php라는 파일을 만듭니다. 다음 코드를 파일에 붙여넣으세요:
<?php
phpinfo();
터미널에서 php -S localhost:8000 명령어를 실행하고 브라우저에서 http://localhost:8000/info.php로 이동하세요. 표시된 웹 페이지에서 아래로 스크롤하여 curl 섹션을 찾아 curl 지원이 활성화되었는지 확인하세요:

curl이 활성화되었음을 확인한 후, curl 세션을 초기화하기 전에 프로젝트 루트 폴더에 curl.php라는 새 파일을 생성해야 합니다. 그런 다음 새 curl.php 파일에 다음 코드를 추가하세요:
<?php
$ch = curl_init();
이 코드는 curl_init() 함수를 사용하여 curl 세션을 시작합니다. 이 함수는 새로운 curl 세션을 초기화하고 curl 핸들 인스턴스를 반환합니다. 이 핸들 인스턴스는 옵션 설정이나 요청 전송과 같은 curl의 추가 작업을 수행하는 데 필수적인 도구입니다.
URL 및 기타 옵션 설정
URL 설정을 포함한 curl 옵션 구성은 PHP에서 curl을 사용해 HTTP 요청을 수행하는 데 있어 핵심적인 부분입니다. 이는 HTTP 요청의 기반을 마련하며, 대상 서버, 수행되는 요청 유형(GET, POST 등), 그리고 필요한 인증이나 매개변수를 결정합니다.
PHP는 curl_setopt() 함수를 제공하여 curl 세션 핸들에 대한 다양한 옵션을 쉽게 설정할 수 있게 하며, 다양한 매개변수와 값을 지정하여 curl 요청의 동작을 사용자 정의할 수 있게 합니다.
curl_setopt() 함수는 curl_setopt(CurlHandle $handle, int $option, mixed $value) 형식을 취합니다. $handle은 curl_init() 함수가 반환한 핸들, $option은 설정하려는 특정 옵션을 나타내며, $value는 지정된 옵션에 설정하려는 값을 나타냅니다.
URL을 설정하려면 curl.php 파일에 다음 코드를 추가하십시오:
$url = "https://dummyjson.com/products";
curl_setopt($ch, CURLOPT_URL, $url);
이 코드는 curl_setopt() 함수를 사용하여 curl 세션 핸들의 URL 옵션을 설정합니다. CURLOPT_URL은 curl 요청의 URL을 설정하는 옵션을 나타내는 상수입니다.
이제 구성할 수 있는 다른 옵션 몇 가지를 살펴보겠습니다.
HTTP 요청을 보다 정밀하게 제어하기 위한 curl 옵션을 설정하려면 curl.php 파일에 다음 코드를 추가하세요:
// cURL 요청에 대한 시간 초과 설정
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
// 서버 응답을 직접 출력하지 않고 문자열로 반환
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 리디렉션 발생 시 추적하지 않음
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
이 코드에서 CURLOPT_TIMEOUT은 30으로 설정되어 curl 요청의 최대 실행 시간을 30초로 정의합니다. 이는 요청이 30초 이상 소요될 경우 타임아웃되어 장시간 대기하는 것을 방지합니다.
CURLOPT_RETURNTRANSFER는 true로 설정되어 curl이 서버 응답을 직접 표시하지 않고 문자열로 반환하도록 지시합니다. 이를 통해 PHP 스크립트 내에서 응답 데이터를 캡처하고 조작할 수 있습니다.
마지막으로 CURLOPT_FOLLOWLOCATION은 false로 설정되어 curl이 HTTP 리디렉션을 자동으로 따라가지 않도록 합니다. 자동 리디렉션을 비활성화함으로써 스크립트가 요청 흐름을 제어할 수 있어 리디렉션 응답을 사용자 정의 방식으로 처리할 수 있습니다.
PHP 문서에서 구성 가능한 다른 옵션에 대해 자세히 알아볼 수 있습니다.
GET 요청 실행
요청을 실행하고 응답을 확인하려면 curl.php 파일에 다음 코드를 추가하세요:
// cURL 요청 실행 및 응답 캡처
$response = curl_exec($ch);
// cURL 오류 확인
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
} else {
// JSON 문자열인 경우 응답 디코딩
$decodedResponse = json_decode($response, true);
// 디코딩 성공 여부 확인
if ($decodedResponse !== null) {
// JSON 응답을 UI에 출력
header('Content-Type: application/json');
echo json_encode($decodedResponse, JSON_PRETTY_PRINT);
} else {
// 응답이 유효한 JSON이 아닌 경우, 일반 텍스트로 출력
echo $response;
}
}
// cURL 세션 종료
curl_close($ch);
그런 다음 브라우저에서 http://localhost:8000/curl.php 로 이동하면 페이지가 로드될 때 JSON 형식의 제품 배열을 확인할 수 있습니다:

매개변수를 포함한 GET 요청 전송
URL에 매개변수를 지정하려면 다음 코드를 $url = "https://dummyjson.com/products"; 아래에 추가하세요:
// 쿼리 매개변수
$params = [
'limit' => 2
];
// 쿼리 매개변수를 포함한 전체 URL 생성
$url .= '?' . http_build_query($params);
이 코드에서 "https://dummyjson.com/products" 을 기본 URL로 정의합니다. 그런 다음 $params라는 연관 배열에 limit라는 쿼리 매개변수를 정의하고 값을 2로 설정합니다. 이 매개변수를 URL에 포함시키기 위해 http_build_query($params) 함수를 사용합니다. 이 함수는 연관 배열을 URL 인코딩된 쿼리 문자열로 변환합니다. 결과 쿼리 문자열은 물음표(? )를 사용하여 원래 URL에 연결되어 지정된 쿼리 매개변수가 포함된 완전한 URL을 생성합니다. 결과 URL은 다음과 같습니다: "https://dummyjson.com/products?limit=2".
테스트를 위해 브라우저에서 http://localhost:8000/curl.php 로 이동한 후 페이지를 새로 고침하세요. JSON 형식으로 두 개의 제품만 포함된 배열을 확인할 수 있습니다:

결론
이 글에서는 PHP의 curl을 사용한 GET 요청 방법을 배웠습니다. GET 요청의 기본 원리를 이해하는 것은 효율적인 데이터 교환의 토대가 됩니다.
다양한 curl 옵션을 활용하면 개발자는 GET 요청을 맞춤 설정할 수 있습니다. 이를 통해 타임아웃을 정밀하게 제어하고, 리디렉션을 관리하며, 추가 처리를 위해 응답을 문자열로 수신할 수 있습니다. 이러한 유연성은 웹 서버와의 상호작용을 세밀하게 조정하고 효율적이며 맞춤형 데이터 검색을 보장합니다.
curl 사용법에 대해 더 알아보려면Python과 함께 curl을 사용하는 이 가이드와프록시와 함께 curl을 사용하는 이 튜토리얼을 확인하세요. 무료 체험으로 저희 제품을 살펴보고 싶으신가요? 지금 바로 가입하세요!