curl 로 처리 후 POST 출력값이 없는상황

curl 로 처리 후 POST 출력값이 없는상황

QA

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);

 

안녕하세요 세크티 님,

1) 소스상에 테스트형태로 올리는 부분이라 링크주소에 대해선 숨김처리하고자 저리 해두었던 부분입니다.

2) <? <?php 둘다 호환 가능한 형태라 이 부분에 대해선 문제가 없는 상황입니다.

3) file_get_content() 함수를 사용했다고 한 부분에 json_decode 써보았을 때는 나오긴 했습니다., 단, 호출을 한 파라미터가 나오 후, 처리 결과에 대해 다시 CURL 을 통해 넘겨줄 시 그들 사이트에서 문제가 되는 상황이였습니다. 이 부분에 대해 재 확인 해봐야 할 것 같습니다. ㅠ

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);

?>

해보실레요.

 

 

 

저도 지금 같은 상황입니다. 원인은 모르지만 헤더를 배열로 추가하면 내용이 안들어가지더라구요

저와 동일하다면 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');

 

이후 어떻게 진행 되셨는지 공유해주시면 저도 제 오류 해결하는데 도움될거 같아요.

답변을 작성하시기 전에 로그인 해주세요.
전체 59
QA 내용 검색
filter #post ×

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT