안녕하세요. 질문드립니다. 현재 외부 쪽에 json 데이터를 보내면 result_code란걸 받게끔 되어있습니다.
curl_setopt($ch, CURLOPT_POST, 0); //GET방식
curl_setopt($ch, CURLOPT_POST, 1); //포스트 방식 둘 다 진행했을 경우에도, 해당 json 데이터 값이 빈값으로 해서 넘어오고 있다고 하는데, 혹시 이상한 부분이 있나요?
아예 데이터가 안넘어오고 있다고 합니다. 제쪽에서는 $json_data가 정상적으로 값이 나오고 curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data); 이렇게 진행했는데 말이죠. 제가 잘못 알고 있고, 오류 부분이 있나요? 답변 부탁드립니다. ㅠㅠ
밑에는 소스입니다.
$url = '보내는 url';
$data = array("TOKEN" => $token, "rewardkey" => $rewardkey, "CMD" => $cmd);
$ch = curl_init();
$json_data = json_encode($data);
curl_setopt($ch, CURLOPT_URL,$url); // 데이타를 보낼 URL 설정
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//echo $json_data; $result = curl_exec($ch);// var_dump($result); //결과값 출력// print_r(curl_getinfo($ch)); //모든정보 출력// echo curl_errno($ch); //에러정보 출력// echo curl_error($ch); //에러정보 출력
curl_close($ch);
$obj = json_decode($result);
$url = 'url?TOKEN='.$token.'&rewardkey='.$rewardkey.'&CMD='.$cmd;
로 스트링으로 집어넣어서 했을 때 정상적으로 값이 넘어갑니다.
json으로 변경해서 넘기는 부분에서 안되네요. 방화벽 문제는 아닌것 같구요. 스트링 형태로 보냈을땐 잘되니..
뭐가 문제일까요..
상대쪽에서는 json 데이터로 보내달라고 합니다. JSON 데이터로 받았을 때 잘 처리 된다고,
제가 JSON으로 보냈을때 로그를 찍어보면 JSON 데이터가 그냥 빈 값으로 넘어 온다는데,
단순 상대방쪽에서 막는 것 같진 않아요.
모순이 있습니다.
$url = 'url?TOKEN='.$token.'&rewardkey='.$rewardkey.'&CMD='.$cmd; 이렇게 전송했을때 데이터가 잘 나온다고 하셨습니다. 그냥 get 방식으로 데이터를 전송한 것이라 상대가 json으로 받은게 아닙니다.
흠 위에 포스트 방식은 외주쪽의 오류일 가능성이 높은건가요?
딱히 문제는 없어보이는데.....
개인적으로 전 무엇을 의미하는지 이해가 조금 난해 하네요 ㅎㅎ
우선 차근차근 풀어봅시다.
curl의 작동 순서.
1. C를 클라이언트. S를 서버라고 치죠. [S는 받고 json을 주는 역할. C는 json을 받아오는 역할]
2. C는 get 이나 post 타입으로 submit을 보냅니다. [curl 방식]
3. S는 get 이나 post 파라메터를 받습니다.
4. S는 파라메터가 맞는지 확인하고, 요청해온 타입으로 데이터를 리턴해 줍니다.
5. C는 object로 S가 리턴해준 값을 받아옵니다.
6. C는 리턴값을 알맞게 풀어서 해독해 줍니다. [이경우에는 json]
이게 기본적인 curl 동작 이고... get 타입이 가능하면 그냥 브라우저에 요청 주소에 맞게 넣으면 curl 으로 받아올 데이터를 확인 할 수 있습니다.
상대가 데이터 잘 주는지 안주는지는 그냥 브라우저에다 때려보면 나옵니다.
그럼 curl 잘못인지, 데이터 주는 서버측 잘못인지 알수 있죠.
질문은 잘 이해가 어려웠지만, 현재 작업에 해결의 실마리를 찾을 수 있길 바라겠습니다 ~
네.
그래서 이렇게 직접적으로 데이터를 보내니
http://210.216.95.108:8090/mktp/api/adhub/ad.api?TOKEN='.$token.'&rewardkey='.$rewardkey.'&CMD='.$cmd;
정상적으로 받아지더라구요. 그런데, 나중에 문제가 생길 수 있으니, JSON 데이터화해서 보내달라하는데, JSON 데이터화 해서 보내면 값을 못 받는다는데, 이게 클라이언트 문제인지, 제쪽 문제인지 햇갈려서입니다..ㅠㅠ
상대에게 말로 하지 말고 문서로 달라고 하세요.
말로 왔다갔다 하면 서로 피곤합니다. 현재는 json화 되어 있지 않은겁니다.
json 데이터로 상대방쪽에 전송하는데 상대쪽에서 그걸 처리할 수 있는지 확인해보세요.
$json_data = json_encode($data);