제목 | curl 질문있습니다. | ||
---|---|---|---|
카테고리 | PHP | ||
글쓴이 | 손씨가문 | 작성시각 | 2017/04/17 16:19:12 |
|
|||
안녕하세요. 질문드립니다. 현재 외부 쪽에 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
|
손씨가문
/
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화 되어 있지 않은겁니다. |
json 데이터로 상대방쪽에 전송하는데 상대쪽에서 그걸 처리할 수 있는지 확인해보세요.
$json_data = json_encode($data);