PHP를 사용하여 cURL GET 요청

Olorunfemi Akinlua 2023년1월30일
  1. curl_init()curl_setopt()를 사용하여 PHP에서 요청 가져오기
  2. PHP에서 API(JSON)와 함께 cURL 사용
PHP를 사용하여 cURL 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"
    }
  },
....
]
Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

관련 문장 - PHP Curl