안녕하세요. 명월입니다.
이 글은 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에 대한 설명이었습니다.
궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.
'Development note > PHP' 카테고리의 다른 글
[PHP] htmlParser(phpquery라이브러리)를 이용해 XML파일(HTML)을 사용하는 방법 (0) | 2019.11.06 |
---|---|
[PHP] ajaxForm을 이용한 파일 업로드(프로그래스바로 파일 업로드 상태를 표시하는 방법) (0) | 2019.10.26 |
[PHP] String 객체를 다루는 방법 (EOT, ob_start, ob_get_contents, ob_end_clean, ob_end_flush) (0) | 2019.10.26 |
[PHP] PHPMailer 라이브러리를 이용해서 메일 발송하는 방법 (0) | 2019.10.19 |
[PHP] Apache 환경의 같은 호스트 안에서 PHP와 Java(Servlet)를 동시에 기동, 운영하는 방법 (0) | 2019.10.17 |
[PHP] 로그 라이브러리 Log4Php (0) | 2019.10.13 |
[CakePHP] CSRF token mismatch가 발생했을 때 처리하는 방법 (0) | 2019.10.05 |
[PHP] 확장 DLL(Zend Extension dll) 파일을 작성하고 적용하는 방법(사용자 내장 함수 만들기) (0) | 2019.09.21 |