CURL에서는 POST 로 문자열이나 배열을 전송하면 상대 측에서 값을 받을 수 있습니다.

<?php 
 $_POST['name'] ='하보니';
 $_POST['email'] = 'habony@example.com';

 curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
 ?>

하지만 중첩된 배열을 전송하게 되면 어떤 문제가 발생하게 되는데, CURL에서 중첩된 배열을 전송하면 우리가 예상했던거와는 다르게 Array 라는 문자열이 전송됩니다.

그래서 이러한 문제를 해결하기 위해 http_build_query() 함수를 이용하거나 아래 사용자 함수를 만들어 원하는 값을 전송할 수 있습니다.

<?php 
 function Curl_Postfields_Create($input, $prefix = '') {
  if(!is_array($input)) {
    return $input;
  }

  $output = array();
  foreach($input as $key => $value) {
    $final_key = $prefix ? $prefix[$key] : $key;
    if(is_array($value)) {
      $output += Curl_Postfields_Create($value, $final_key);
    } else {
      $output[$final_key] = $value;
    }
  }
  return $output;
 }

 $_POST['name'] = '하보니';
 $_POST['email'] = 'habony@emample.com';
 $_POST['type']['file']['name'] = 'habonyphp.bmp';
 $_POST['type']['mime'] = 'bmp';
 $output = Curl_Postfields_Create($_POST);

 curl_setopt($ch, CURLOPT_POSTFIELDS, $output);
 ?>

CURL에서 단순한 배열 또는 문자열이 아니면 올바로 전송할 수 없으므로 중첩된 배열을 분해해서 단순한 문지열로 변환한 후 전송하는 방법입니다.

0 댓글