개발 Q&A

제목 curl 질문있습니다.
카테고리 PHP
글쓴이 손씨가문 작성시각 2017/04/17 16:19:12
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 13123   RSS

안녕하세요. 질문드립니다. 현재 외부 쪽에 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으로 변경해서 넘기는 부분에서 안되네요. 방화벽 문제는 아닌것 같구요. 스트링 형태로 보냈을땐 잘되니..

 뭐가 문제일까요..

 다음글 403 에러가 계속 발생합니다. (6)
 이전글 set_flashdata 질문입니다 (1)

댓글

변종원(웅파) / 2017/04/17 16:44:30 / 추천 0

json 데이터로 상대방쪽에 전송하는데 상대쪽에서 그걸 처리할 수 있는지 확인해보세요.

$json_data = json_encode($data);

손씨가문 / 2017/04/17 16:46:17 / 추천 0

상대쪽에서는 json 데이터로 보내달라고 합니다. JSON 데이터로 받았을 때 잘 처리 된다고,

제가 JSON으로 보냈을때 로그를 찍어보면 JSON 데이터가 그냥 빈 값으로 넘어 온다는데,

단순 상대방쪽에서 막는 것 같진 않아요.

변종원(웅파) / 2017/04/17 16:48:28 / 추천 0

모순이 있습니다. 

$url = 'url?TOKEN='.$token.'&rewardkey='.$rewardkey.'&CMD='.$cmd; 이렇게 전송했을때 데이터가 잘 나온다고 하셨습니다.  그냥 get 방식으로 데이터를 전송한 것이라 상대가 json으로 받은게 아닙니다.

 

손씨가문 / 2017/04/17 17:01:41 / 추천 0

흠 위에 포스트 방식은 외주쪽의 오류일 가능성이 높은건가요?

딱히 문제는 없어보이는데.....

kaido / 2017/04/17 17:08:55 / 추천 0

개인적으로 전 무엇을 의미하는지 이해가 조금 난해 하네요 ㅎㅎ

우선 차근차근 풀어봅시다.

 

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 잘못인지, 데이터 주는 서버측 잘못인지 알수 있죠.

 

질문은 잘 이해가 어려웠지만, 현재 작업에 해결의 실마리를 찾을 수 있길 바라겠습니다 ~

손씨가문 / 2017/04/17 17:49:29 / 추천 0

네. 

그래서 이렇게 직접적으로 데이터를 보내니

http://210.216.95.108:8090/mktp/api/adhub/ad.api?TOKEN='.$token.'&rewardkey='.$rewardkey.'&CMD='.$cmd;

 

정상적으로 받아지더라구요. 그런데, 나중에 문제가 생길 수 있으니, JSON 데이터화해서 보내달라하는데, JSON 데이터화 해서 보내면 값을 못 받는다는데, 이게 클라이언트 문제인지, 제쪽 문제인지 햇갈려서입니다..ㅠㅠ

변종원(웅파) / 2017/04/17 22:42:26 / 추천 0

상대에게 말로 하지 말고 문서로 달라고 하세요. 

말로 왔다갔다 하면 서로 피곤합니다. 현재는 json화 되어 있지 않은겁니다.