[PHP] PHP의 HttpConnection 도구 cURL 사용 방법


Development note/PHP  2019. 10. 18. 09:00

안녕하세요. 명월입니다.


이 글은 PHP에서 사용되는 HttpConnection 도구 cURL에 대한 소개입니다.


웹 서비스의 기본 통신 방식은 웹 브라우저에서 웹 서버와 비동기 소켓 통신에서 Http 프로토콜 규약으로 통신하는 것을 뜻합니다. 여기서 웹 브라우저가 아닌 서버에서 서버로 웹 통신을 할 수 있는데 보통 HttpConnection이라고 합니다.

자바에서는 HttpUrlConnection을 이용하고 C#에서는 HttpWebRequest를 이용합니다.

링크 - [Java] HttpUrlConnection을 이용해서 웹 페이지를 가져오기

링크 - [C#] HttpConnection을 이용해서 웹 페이지 가져오기


PHP에서도 위와 같이 웹 프로토콜을 이용하여 웹 서버에 접속할 수 있는데 그것이 cURL입니다. cURL은 oAuth2라던가 SOAP통신, FTP등등에서 자주 사용됩니다.


cURL를 사용하려면 php.ini에서 extension 모듈을 로딩해야 합니다.

그리고 apache를 기동하고 phpinfo로 확인하겠습니다.

링크 - https://www.php.net/manual/en/book.curl.php

<?php
function connectHttp($url, $post, $param, $header = null)
{
  $handle = curl_init();
  try {
    // 접속할 url
    curl_setopt($handle, CURLOPT_URL, $url);
    // 위치 해더 설절
    curl_setopt($handle, CURLOPT_FOLLOWLOCATION, TRUE);
    // 프록시가 있을 경우 설정
    //curl_setopt($handle, CURLOPT_PROXY, "프록시 IP");
    //curl_setopt($handle, CURLOPT_PROXYUSERPWD, "프록시 ID:PW");
    // Auto Redirect
    curl_setopt($handle, CURLOPT_AUTOREFERER, TRUE);
    // 요청 메소드 타입
    curl_setopt($handle, CURLOPT_POST, $post);
    // 파라미터(array 타입)
    curl_setopt($handle, CURLOPT_POSTFIELDS, $param);
    // 인증서와 관련된 파라미터인데 기본 True 설정이다.
    curl_setopt($handle, CURLOPT_VERBOSE, TRUE);
    // 인증서 유효성 검사
    curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, FALSE);
    // response 결과 여부(리턴 값으로 header값과 body값을 받을 수 있다.)
    curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
    // 리턴값으로 해더값을 요구 여부
    curl_setopt($handle, CURLOPT_HEADER, TRUE);
    if ($header !== null) {
      // 해더 설정(array타입)
      curl_setopt($handle, CURLOPT_HTTPHEADER, $header);
    }
    // 접속 실행
    $response = curl_exec($handle);
    // header 사이즈
    $header_size = curl_getinfo($handle, CURLINFO_HEADER_SIZE);
    $header_map = array();
    // 결과에서 header 부분을 분리한다.
    $header = substr($response, 0, $header_size);
    // header를 개행 구분으로 배열로 나눈다.
    $temp = explode("\r\n", $header);
    array_push($header_map, $temp[0]);
    // header를 map에 넣는다.
    foreach($temp as $item){
      $temp2 = explode(":", $item);
      $header_map[$temp2[0]] = str_replace($temp2[0] . ":", "", $item);
    }
    // body를 넣는다.
    $body = substr($response, $header_size);
    return array(
      "header" => $header_map,
      "body" => $body
    );
  } finally {
    curl_close($handle);
  }
}
// 블로그를 접속해 봅니다.
$ret = connectHttp("https://nowonbun.tistory.com", "GET", array());
var_dump($ret);

header[0]을 보면 HTTP/1.1 200의 결과 응답 코드를 받았습니다. 정상적인 통신 완료라는 뜻입니다.

그리고 각 해더의 값과 body의 값을 받았습니다. header를 보니 Tistory 서버는 apache 서버이군요.. 아마 PHP로 만들었을 것입니다.

참조 - CURL 옵션 설정 - http://blog.naver.com/handukgyu/100114255796


여기까지 PHP에서 사용되는 HttpConnection 도구 cURL에 대한 설명이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.