취업/PHP

[php] curl 통신 유형 post,get,put, delete

카슈밀 2021. 12. 30. 21:58
반응형

차트 유형이 여러게 있는데 이렇게도 쓰더라.

function CallAPI($method, $api, $data) {
    $url = "http://localhost:82/slimdemo/RESTAPI/" . $api;
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
    switch ($method) {
        case "GET":
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");
            break;
        case "POST":
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
            break;
        case "PUT":
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
            break;
        case "DELETE":
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE"); 
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
            break;
    }
    $response = curl_exec($curl);
    $data = json_decode($response);

    /* Check for 404 (file not found). */
    $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    // Check the HTTP Status code
    switch ($httpCode) {
        case 200:
            $error_status = "200: Success";
            return ($data);
            break;
        case 404:
            $error_status = "404: API Not found";
            break;
        case 500:
            $error_status = "500: servers replied with an error.";
            break;
        case 502:
            $error_status = "502: servers may be down or being upgraded. Hopefully they'll be OK soon!";
            break;
        case 503:
            $error_status = "503: service unavailable. Hopefully they'll be OK soon!";
            break;
        default:
            $error_status = "Undocumented error: " . $httpCode . " : " . curl_error($curl);
            break;
    }
    curl_close($curl);
    echo $error_status;
    die;
}


// CALL Get Method
$api_data = array('id'=>$_GET['eid']);
$api_url = "www.onlinecode/GetCategoryById";
$result = CallAPI('GET', $api_url, $api_data);
 
// CALL Post Method
$api_url = "www.onlinecode/InsertCategory";
$api_data = array('title'=>$_REQUEST['somedata'],'description'=>$_REQUEST['somedata']);
$result = CallAPI('POST', $api_url, $api_data);
 
// CALL Put Method
$api_url = "www.onlinecode/UpdateCategory";
$api_data = array('id'=>$_REQUEST['somedata'],m'title'=>$_REQUEST['somedata'],'description'=>$_REQUEST['somedata']);
$result = CallAPI('POST', $api_url, $api_data);
 
// CALL Delete Method
$api_url = "www.onlinecode/DeleteCategory";
$api_data = array('id'=>$_GET['did']);
$result = CallAPI('DELETE', $api_url, $api_data);

이런 것도 있는데, 이것보단 그냥...

https://onlinecode.org/call-curl-get-post-put-delete-php/

 

how to call curl with get, post, put, delete in php - onlinecode

call curl with get, post, put, delete,curl with get, curl with post, curl with put, curl with delete, call curl with get, delete in php, php curl delete

onlinecode.org

 

<?php
$url = 'https://kapi.kakao.com/v1/user/me'; //접속할 url 입력
 
$post_data["param1key"] = "param1value";
$post_data["param2key"] = "param2value";
 
$access_token_value = "올바른 access token 입력";
 
//$header_data = array('Authorization: Bearer access_token_value'); //에러 발생
$header_data = [];
$header_data[] = 'Authorization: Bearer '.$access_token_value;
 
$ch = curl_init(); //curl 사용 전 초기화 필수(curl handle)
 
curl_setopt($ch, CURLOPT_URL, $url); //URL 지정하기
curl_setopt($ch, CURLOPT_POST, 1); //0이 default 값이며 POST 통신을 위해 1로 설정해야 함
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post_data); //POST로 보낼 데이터 지정하기
curl_setopt ($ch, CURLOPT_POSTFIELDSIZE, 0); //이 값을 0으로 해야 알아서 &post_data 크기를 측정하는듯
 
curl_setopt($ch, CURLOPT_HEADER, true);//헤더 정보를 보내도록 함(*필수)
curl_setopt($ch, CURLOPT_HTTPHEADER, $header_data); //header 지정하기
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); //이 옵션이 0으로 지정되면 curl_exec의 결과값을 브라우저에 바로 보여줌. 이 값을 1로 하면 결과값을 return하게 되어 변수에 저장 가능(테스트 시 기본값은 1인듯?)
$res = curl_exec ($ch);
 
var_dump($res);//결과값 확인하기
echo '<br>';
print_r(curl_getinfo($ch));//마지막 http 전송 정보 출력
echo curl_errno($ch);//마지막 에러 번호 출력
echo curl_error($ch);//현재 세션의 마지막 에러 출력
curl_close($ch);
?>

위방식보다 아래의 방식이 최고 나은 듯 싶다.

커스텀 헤더도 넣고,  get방식도 그냥 'delete'대신 'get'넣으면 되는지라.

 

$header=array(
        'Content-Type: application/json'
);

'delete'방식

$data = array(
	'id'=> 1,
    'name' => chicken
);


$header=array(
        'Content-Type: application/json'
);

$query = http_build_query($data);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
$response = curl_exec($ch);
curl_close($ch);

'put'방식

$data = array(
	'id'=> 1,
    'name' => chicken
);

$header=array(
        'Content-Type: application/json'
);

$query = http_build_query($data);

$ch = curl_init($url);
 curl_setopt($ch, CURLOPT_HEADER, false);
 curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
 curl_setopt($ch, CURLOPT_POSTFIELDS,$query);
 $response = curl_exec($ch);

get

$data = array(
    'test' => 'test'
);
$domain = "https://www.naver.com";
$query = http_build_query($data);
$url = $domain . "?" . $query;

$ch = curl_init();                                 //curl 초기화
curl_setopt($ch, CURLOPT_URL, $url);               //URL 지정하기
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    //요청 결과를 문자열로 반환 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);      //connection timeout 10초 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);   //원격 서버의 인증서가 유효한지 검사 안함
 
$response = curl_exec($ch);
curl_close($ch);
 
return $response;

post

$data = array(
    'test' => 'test'
);
 
$url = "https://www.naver.com";
 
$ch = curl_init();                                 //curl 초기화
curl_setopt($ch, CURLOPT_URL, $url);               //URL 지정하기
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    //요청 결과를 문자열로 반환 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);      //connection timeout 10초 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);   //원격 서버의 인증서가 유효한지 검사 안함
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);       //POST data
curl_setopt($ch, CURLOPT_POST, true);              //true시 post 전송 
 
$response = curl_exec($ch);
curl_close($ch);
 
return $response;

대충 이렇게 쓰면 된다.

 

컬통신 유형 끝.

728x90