curl 로 처리 후 POST 출력값이 없는상황
본문
안녕하세요, 개발을 진행하면서 계속해서 확인하다 다른분들에게 여쭈어보고자.. 글을 남기게 되었습니다.
현재, curl 처리를 통해 결과 페이지에 출력값을 확인하고 있는상황인데요, 해당 결과 페이지에서 출력시 아무런 값도 나오지 않는 상황을 대수롭지 않게 생각하고, 요청값에 대한 처리를 먼저 다 하고 난 뒤 확인하게 되었는데,, 쉽게 풀리지 않는 상황이 되었습니다.
1) 출력페이지에서 print_r($_REQUEST) 을 통해서 요청 파라미터가 나오지 않는 상황이고요,
file_get_contents() 함수를 쓰면 값이 출력되긴 하지만 요청받은 값에 대해 file_get_contents() 함수를 쓰게 되면, json 함수형태를 제대로 인지하지 못하는 형태가 되어버려서,, 파라미터에 대해 $_REQUEST 또는 $_POST 를 써서 값을 가져와야 하는데,, 왜 값이 출력되지 않는지 모르겠습니다.
2) php_info를 통한 기본값 확인시 curl 이 활성화 되어 있고,
서버 내에서 curl 명령어 실행을 하더라도 동작하는 부분은 확인이 되는데요,
두 페이지에서 기본적인 형태로 처리하는데도 처리가 안되고 있어서,, 답답한 상황입니다.
서버상에서 따로 세팅해주어야 할 부분이 있을까요?
3) Input /output 의 경우 80 포트를 모두 허용으로도 해보았습니다.
4) curl_getinfo, curl_errno, curl_error 함수를 통해 에러사항이 따로 없는지도 확인해보았습니다...
5) 출력페이지에서 링크?파라미터를 넘길경우 제대로 동작합니다.
아래의 경우, 제가 테스트로 간단히 확인하고자 만들어서 썼던 부분입니다....
1) 요청페이지
<?php
$data = array(
'test' => 'test'
);
$json_data = json_encode($data, JSON_UNESCAPED_UNICODE);
$url = "./test.php";
$ch = curl_init(); //curl 초기화
curl_setopt($ch, CURLOPT_URL, $url); //URL 지정하기
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=UTF-8'));
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, $json_data); //POST data
curl_setopt($ch, CURLOPT_POST, true); //true시 post 전송
$response = curl_exec($ch);
curl_close($ch);
return $response;
//var_dump($response); //결과 값 출력
print_r(curl_getinfo($ch)); //모든 정보 출력
//echo curl_errno($ch); //에러 정보 출력
//echo curl_error($ch); //에러 정보 출력
?>
2. 출력(확인)페이지
<?
print_r($_REQUEST);
?>
두서없이 장황한 글인것 같은데,, 결론적으로 curl을 통해 넘어간 요청 파라미터가 출력되지 않는 문제입니다. !-->!-->
답변 5
1. 요청페이지 주소를 도메인 포함한 주소로 변경하세요.
$url = "./test.php"; => $url = G5_URL."/test.php";
2. 출력페이지 1번줄에 <? 를 <?php 로 변경하세요.
3. 출력페이지 데이터 출력을 아래처럼 바꿔보세요.
$data = json_decode(file_get_contents('php://input'), true);
print_r($data);
curl 결과를 json 형태로 받는 것이니까, 간단하게 이렇게 해 볼 수 있겠네요.
<?php
echp json_decode( $_REQUEST));
$data = array(
'test' => 'test'
);
를
$data = urlencode(json_encode($data)) 로 post 필드에 보내주시구요.
curl 옵션은
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, array("data"=>$data
));
이거두개만 사용하시구,
test.php
<?php
$datastring = $_POST['data'];
$data = json_decode( urldecode( $datastring));
var_dump($data);
?>
해보실레요.
혹시 로컬에서 작업하시는건가요?
로컬이면 url 에 public ip 로 시작하는 url 전체( 절대경로 )라도 잡아주셔야 할거 같은데
저도 지금 같은 상황입니다. 원인은 모르지만 헤더를 배열로 추가하면 내용이 안들어가지더라구요
저와 동일하다면 1번 내용에서 array를 지우고 2번처럼 text로 간다면 일단 $_POST에서 데이터는 보여질수도 있을거 같아요.
저도 지금 데이터가 안보여주고있어 답답해서 찾으려 왔는데 같은 현상이 보여 댓글남겨요
1. curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=UTF-8'));
2. curl_setopt($ch, CURLOPT_HTTPHEADER, 'Content-Type: application/json; charset=UTF-8');
이후 어떻게 진행 되셨는지 공유해주시면 저도 제 오류 해결하는데 도움될거 같아요.