2024. 4. 18. 15:59ㆍPHP
[ 환경 ]
ㄴ php 7
※ CURL 이란
ㄴ PHP에서 사용하는 모듈 중 하나이며, 주로 API연결에 많이 사용이 된다. 무료이며 서버에 모듈 설치를 해야 사용이 가능하다.
ㄴ PHP를 사용하게되면 많이 사용하게 될 기술이다.
ㄴ CURL 모듈에 사용되는 함수들이 존재하며 해당함수에는 옵션이 존재하며, 함수와 옵션을 세팅해서 진행한다.
1. CURL 세팅
<?php
// curl.php페이지
// curl 세팅페이지
$ch = curl_init(); // 세션 초기화 함수.
// curl_setopt (curl 옵션세팅 함수)
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // curl_exec반환 값 설정 (1일시 문자열로 변환)
curl_setopt($ch, CURLOPT_POST, 1); // 메서드 설정 1-post/2-get
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // post방식으로 담은 데이터
curl_setopt($ch, CURLOPT_URL, ???); // curl 전송할 url경로
$res = curl_exec($ch); // curl 실행 함수.
curl_close(); // curl 종료 함수.
?>
ㄴ curl.php 페이지
ㄴ curl 함수와 옵션을 기본으로 세팅하였다.
ㄴ 보통은 form태그를 사용해서 진행하지만, 오늘은 페이지에서 바로 진행하겠다.
ex) form태그에서 정보입력(action에서 정보전송) - curl.php페이지에서 받은 데이터 한번 더 다른페이지로 전송 - 최종 페이지에서 처리
※ 서로 다른 사이트에서 통신하여 정보를 주고 받을때 사용을 많이한다.(api통신)
ㄴ 오늘은 한 사이트내에서 전송할 예정
2. 임의의 정보로 CURL 전송
// curl.php페이지
// curl 세팅페이지
$data = []; // curl전송할 데이터를 담을 빈배열 생성
$data['test1'] = 'test1'; // key - test1 value - test1
$data['test2'] = 'test2'; // key - test2 value - test2
$data['test3'] = 'test3'; // key - test3 value - test3
$site_url = "curl2.php"; // curl 전송할 url변수
$ch = curl_init(); // 세션 초기화 함수.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // curl_exec반환 값 설정 (1일시 문자열로 변환)
curl_setopt($ch, CURLOPT_POST, 1); // 메서드 설정 1-post/2-get
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // post방식으로 담은 데이터
curl_setopt($ch, CURLOPT_URL, $site_url); // curl 전송할 url경로
$res = curl_exec($ch); // curl 실행 함수.
curl_close(); // curl 종료 함수.
ㄴ curl.php 페이지
ㄴ 빈 배열을 생성하여 3개의 값을 넣어서 CURLOPT_POSTFIELDS 옵션에 담기.
ㄴ url변수를 선언하고, CURLOPT_URL옵션에 담기.
※ 배열의 key, value는 아래 url에서 참고
ㄴ https://kuk1938.tistory.com/34
3. CURL 전송받은 페이지 출력문 작성
<?php
// curl2.php 페이지
echo "[ curl 전송 받는 페이지 ]<br>";
echo "$_POST로 전송 받은 값 출력<br>";
print_r($_POST);
echo "<br> 첫번째 :".$_POST['test1'];
echo "<br> 두번째 :".$_POST['test2'];
echo "<br> 세번째 :".$_POST['test3'];
?>
ㄴ curl2.php 페이지
ㄴ print_r()로 $_post로 담은 배열 출력 / 각각의 key값 출력
ㄴ curl.php페이지에서 curl이 정상적으로 전송되면 curl2.php에 있는 출력문이 페이지에 출력된다.
4. 주의사항
4-1) curl2.php 페이지가 같은 사이트에 존재하더라도 curl은 프로토콜과 인증을 다루는 도구이기에 https나 http 프로토콜 주소를 url변수에 넣어줘야한다.
4-2) curl_close() curl종료시에서 $ch 세션초기화변수를 넣어주지 않아 오류가 생겼었다. 마지막에 꼭 넣어주도록 하자.
ㄴ 함수를 실행하려는데 실행할 값이 없어서 curl전송 자체가 되지 않았었다.
4-3) 현재 페이지는 http로 보안인증서가 설치되어 있지 않기 때문에 ssl인증서 유효성검사하는 옵션을 추가해주었다.
ㄴ 해당 옵션이 없어도 오류가 나지는 않으나, 미리 코드를 심어두는게 좋다.
// curl2페이지 결과확인을 위해 수정한 코드와 추가한 코드.
$site_url = "http://???.??.??/curl2.php"; // curl 전송할 url변수
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // SSL인증서 유효성검사 설정X
echo $res; // curl 결과 출력
curl_close($ch); // curl 종료 함수.
return $res; // curl 결과 최종리턴
ㄴ 추가한 코드와 수정한 코드이다.
5. curl.php 페이지에서 최종으로 확인
※ 4번 기준으로 추가 및 수정을 완료하였다.
// curl.php페이지
// curl 세팅페이지
$data = []; // curl전송할 데이터를 담을 빈배열 생성
$data['test1'] = 'test1'; // key - test1 value - test1
$data['test2'] = 'test2'; // key - test2 value - test2
$data['test3'] = 'test3'; // key - test3 value - test3
$site_url = "http://????.????.???/curl2.php"; // curl 전송할 url변수
$ch = curl_init(); // 세션 초기화 함수.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // curl_exec반환 값 설정 (1일시 문자열로 변환)
curl_setopt($ch, CURLOPT_POST, 1); // 메서드 설정 1-post/2-get
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // SSL인증서 유효성검사 설정X
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // post방식으로 담은 데이터
curl_setopt($ch, CURLOPT_URL, $site_url); // curl 전송할 url경로
$res = curl_exec($ch); // curl 실행 함수.
echo $res; // curl 결과 출력
curl_close($ch); // curl 종료 함수.
return $res; // curl 결과 최종리턴
ㄴ 최종 curl.php 페이지
<?php
// curl2.php 페이지
echo "[ curl 전송 받는 페이지 ]<br>";
echo "$_POST로 전송 받은 값 출력<br>";
print_r($_POST);
echo "<br> 첫번째 :".$_POST['test1'];
echo "<br> 두번째 :".$_POST['test2'];
echo "<br> 세번째 :".$_POST['test3'];
?>
ㄴ 출력문 찍어놓은 curl2.php 페이지
6. 최종 출력문 확인
※ curl.php 페이지를 접속하면 정상적으로 curl이 전송되어 curl2.php에 찍어둔 출력문의 결과를 가져온다.
'PHP' 카테고리의 다른 글
[11] PHP - $_FILES로 파일 업로드 (0) | 2024.04.22 |
---|---|
[10] PHP - $_FILES란? (0) | 2024.04.21 |
[8] PHP - $_GET 사용법 (0) | 2024.04.16 |
[7] PHP - $_POST 사용법 (0) | 2024.04.15 |
[6] PHP - 파일 불러오기(include,require) (0) | 2024.04.14 |