curl post 전송시 header를 추가하면 파라메터가 전송이 안되고있어요
본문
외부 API 호출 테스트 도중 발생한 문제입니다.
postman으로 호출 테스트 결과 잘 동작해서 php curl 으로 호출테스트를 하는데 필수파라메터들이 없다고 나와서 test.php를 통해 보니 $_POST 에 값이 없어서 이거저거 만지다 header 없이 보내니 $_POST에 값을 넘겨 받을수는 있었습니다.
하지만 외부api 호출 시 apiKey는 필수이기에 헤더는 넣어주어야 하는데
헤더를 넣으면 파라메터들이 사라지는 현상이 발생하여 도움을 요청합니다!!!
function request_curl ($url, $is_post = 0, $data = array(), $custom_header = NULL)
{
//승인 요청을 보내는 함수입니다.
$ch = curl_init ();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_SSLVERSION, 1);
curl_setopt ($ch, CURLOPT_POST, $is_post);
if ($is_post) {
curl_setopt ($ch, CURLOPT_POSTFIELDS, $data);
}
curl_setopt ($ch, CURLOPT_TIMEOUT, 300);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
//curl_setopt ($ch, CURLOPT_HEADER, true);
if ($custom_header) {
curl_setopt ($ch, CURLOPT_HTTPHEADER, $custom_header);
}
$result[0] = curl_exec ($ch);
$result[1] = curl_errno ($ch);
if (!curl_errno($ch)) {
$info = curl_getinfo($ch);
// echo 'Took ', $info['total_time'], ' seconds to send a request to ', $info['url'], "\n";
echo json_encode($info);
echo "<br>";
}
curl_close ($ch);
return $result[0];
}
$url = G5_URL.'/test.php';
$params_c = [
test => 'test'
];
$header[] = 'apikey: abcd....'; // 요 헤더를 지우고 보내면 test.php에서 post data들을 볼순있습니다.
request_curl($url, 1, http_build_query($params_c), $header);
test.php 내용입니다.
post data들을 잘 가져왔는지 여부만 보여줄려고 생성되었습니다.
$postData = json_encode($_POST);
var_export($_POST);
exit();
답변 3
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: someAuthorization',
'x-api-key: somekey',
'Content-Type: application/x-www-form-urlencoded' // 이것도 추가해 보세요.
));
CURLOPT_HEADER 옵션에 1추가해보실레요?
받는쪽에서 file_get_contents('php://input') 이걸로 받아보시면 안되나요?
답변을 작성하시기 전에 로그인 해주세요.