HOWTO · PHP

PHP를 사용하여 cURL GET 요청

이 자습서에서는 cURL을 사용하여 PHP에서 GET 요청 작업을 수행하는 방법을 설명하고 자세히 설명합니다.

이 페이지의 내용

웹과 주로 HTTPS를 통해 GET 요청을 사용하여 특정 리소스 표현을 얻습니다. 데이터를 얻기 위해 GET 방법이 사용됩니다.

특히 API 및 웹 스크래핑 시나리오에서 개발자는 언어별 방법을 사용합니다. 우리는 cURL 함수를 사용하여 PHP에서 GET 요청을 처리합니다.

cURL 라이브러리는 초기화, 연결 설정 및 전송에서 리소스 반환까지의 작업을 처리합니다. 이러한 모든 작업을 수행하기 위해 curl_close(), curl_init()에서 curl_exec()와 같은 내장 함수를 사용할 수 있습니다.

이 튜토리얼은 cURL GET 요청에 대한 다양한 사용 사례와 이를 수행하는 해당 기능에 대해 설명합니다.

curl_init() 및 curl_setopt()를 사용하여 PHP에서 요청 가져오기

다른 서버나 사용자로부터 요청을 받는 일반적인 형식은 다음과 같은 기본 기능을 사용하는 것입니다.

curl_init(); // initializes a cURL session
curl_setopt(); // changes the cURL session behavior with options
curl_exec(); // executes the started cURL session
curl_close(); // closes the cURL session and deletes the variable made by curl_init();

이 기사에서 네 가지 기능을 모두 볼 수 있고 cURL 라이브러리를 사용하여 작성할 GET 요청 코드의 대부분을 볼 수 있습니다.

이제 몇 가지 사용 예를 위해 $url 변수에 요청을 받고자 하는 사이트의 URL을 할당하고 curl_init() 함수를 사용하여 cURL 세션을 시작합니다. 그런 다음 지정된 URL에서 수행되는 cURL 전송에 대한 옵션을 지정합니다.

첫 번째 curl_setopt() 함수 문에는 $url 변수 할당 값과 함께 “가져올 URL” 옵션이 있습니다. 두 번째 curl_setopt() 함수 문은 부울 값을 보유하는 전송을 문자열로 반환 옵션을 보유합니다.

<?php

$url = "https://reqbin.com/echo";

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

//for debug only!
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

$resp = curl_exec($curl);
curl_close($curl);
var_dump($resp);

?>

위의 PHP 코드의 출력은 아래와 같습니다.

curl_init 및 curl_setopt를 사용하여 PHP에서 요청 가져오기

PHP에서 API(JSON)와 함께 cURL 사용

일반적으로 API와 상호 작용할 때 데이터 응답은 종종 JSON이고 cURL 기능을 사용하면 curl_getinfo() 및 json_encode() 기능을 사용하여 속성-값 쌍 및 배열 형식으로 이러한 데이터 개체를 적절하게 처리할 수 있습니다. 다른 사람들 사이에서.

여기에서 데모 User API와 상호 작용하고 cURL 라이브러리를 사용하여 JSON 데이터를 얻고 적절한 기능을 사용하여 JSON 파일을 인코딩합니다.

  1. URL 변수와 cURL 세션을 초기화합니다.

    $url = 'https://jsonplaceholder.typicode.com/users';
    // Sample example to get data.
    $resource = curl_init($url);
    
  2. cURL 옵션과 정보 변수를 설정합니다.

    curl_setopt($resource, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($resource);
    $info = curl_getinfo($resource);
    $code = curl_getinfo($resource, CURLINFO_HTTP_CODE);
    
  3. 응답 상태 코드를 확인하기 위해 디버그하지만(선택 단계) 200이 표시되어야 합니다.

    echo $result.'<br>';
    echo "<pre>";
    print_r($info);
    echo "</pre>";
    
    // Get response status code
    echo "<pre>";
    print_r($code);
    echo "</pre>";
    
  4. 리소스를 더 잘 관리하려면 cURL 세션을 닫습니다.

    curl_close($resource);
    
  5. JSON을 통해 API에서 얻은 데이터를 저장할 어레이 템플릿을 만듭니다.

    // set_opt_array
    $user = [
    	'name' => 'John Doe',
    	'username' => 'john',
    	'email' => 'john@example.com'
    ];
    
  6. curl_init() 및 curl_setopt_array()를 사용하여 모든 중요한 옵션을 사용하여 URL에서 구문 분석된 JSON 데이터를 처리합니다.

    $resource = curl_init();
    curl_setopt_array($resource, [
    	CURLOPT_URL => $url,
    	CURLOPT_RETURNTRANSFER => true,
    	CURLOPT_POST => true,
    	CURLOPT_HTTPHEADER => ['content-type: application/json'],
    	CURLOPT_POSTFIELDS => json_encode($user),
    ]);
    
  7. curl_exec() 및 curl_close() 함수를 사용하여 초기화된 cURL 세션을 실행하고 cURL 세션을 닫고 각각 모든 리소스를 해제합니다. 그러나 PHP 8.0.0 이상에서는 curl_close()함수가 효과가 없습니다.

    $result = curl_exec($resource); // creates and returns result
    curl_close($resource);
    echo $result;
    

코드의 출력은 아래의 PHP 다차원 배열로 나타납니다.

[
  {
    "id": 1,
    "name": "Leanne Graham",
    "username": "Bret",
    "email": "Sincere@april.biz",
    "address": {
      "street": "Kulas Light",
      "suite": "Apt. 556",
      "city": "Gwenborough",
      "zipcode": "92998-3874",
      "geo": {
        "lat": "-37.3159",
        "lng": "81.1496"
      }
    },
    "phone": "1-770-736-8031 x56442",
    "website": "hildegard.org",
    "company": {
      "name": "Romaguera-Crona",
      "catchPhrase": "Multi-layered client-server neural-net",
      "bs": "harness real-time e-markets"
    }
  },
  {
    "id": 2,
    "name": "Ervin Howell",
    "username": "Antonette",
    "email": "Shanna@melissa.tv",
    "address": {
      "street": "Victor Plains",
      "suite": "Suite 879",
      "city": "Wisokyburgh",
      "zipcode": "90566-7771",
      "geo": {
        "lat": "-43.9509",
        "lng": "-34.4618"
      }
    },
    "phone": "010-692-6593 x09125",
    "website": "anastasia.net",
    "company": {
      "name": "Deckow-Crist",
      "catchPhrase": "Proactive didactic contingency",
      "bs": "synergize scalable supply-chains"
    }
  },
  {
    "id": 3,
    "name": "Clementine Bauch",
    "username": "Samantha",
    "email": "Nathan@yesenia.net",
    "address": {
      "street": "Douglas Extension",
      "suite": "Suite 847",
      "city": "McKenziehaven",
      "zipcode": "59590-4157",
      "geo": {
        "lat": "-68.6102",
        "lng": "-47.0653"
      }
    },
    "phone": "1-463-123-4447",
    "website": "ramiro.info",
    "company": {
      "name": "Romaguera-Jacobson",
      "catchPhrase": "Face to face bifurcated interface",
      "bs": "e-enable strategic applications"
    }
  },
....
]