curl 질문드립니다.

curl 질문드립니다.

QA

curl 질문드립니다.

답변 5

본문

안녕하세요

 

curl을 사용해봤습니다.

 

요청하는쪽에서는 


$post = array(
    'mid'   => 'hong',
    'key'   => 'abcdefg',
    'token' => 'test' 
);

$url = "https://www.abc123.co.kr/test.php";
$ch = curl_init();                             
curl_setopt($ch, CURLOPT_URL, $url);           
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);      
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);   
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);      
curl_setopt($ch, CURLOPT_POST, true);          
 
$response = curl_exec($ch);
curl_close($ch);
return $response;

 

로 보냈는데 받는쪽에서 저 $post값을 못 받아오겠습니다.

 


$post 값에
 
$post = "storeName=반갑다&skip=0&cateCode=5&limit=10";

 

이렇게 보내면 받는쪽에서

 


$_POST[storeName] // 반갑다
$_POST[skip] // 0

 

이런식으로 뜨던데

 

array나 json은 못받겠네요 찾아봐도 보내는쪽만 나오고 받는쪽에 대한게 잘 안나와서요

 

부탁드립니다.

 

이 질문에 댓글 쓰기 :

답변 5

받는쪽에서 저 $post값을 못 받아오겠습니다.<---------아무것도 할 필요가 없습니다

그냥 <form name='aaa' method='post'><--- 이렇게 해서 값이 넘어왔다고 생각하고 처리하면 됩니다

 

$post = array(  'mid'   => 'hong',  'key'   => 'abcdefg',   'token' => 'test' );

위 배열을 post로 보냈으니 test.php에서는 $_POST로 사용하면 됩니다

test.php

<?php

print_r($_POST);

 

echo $_POST['mid'];

echo $_POST['key'];

echo $_POST['token'];

?>

위와 같이 하면 값이 나올텐데 다른 무언가를 해줄 필요는 없습니다

16행 $response에는 test.php에서 출력하는 내용을 받아오는건데 test.php에서

무언가를 작업 한 후 성공/실패 여부를 돌려준다든가 전송이 성공이라든가 하는 것을

판단할 때 사용하면 됩니다

 

 

개념이 아직 정립이 안된 모양이군요
보내는 측에서 전송을 하면 즉시 test.php가 실행 되는데 받는 쪽에서 F5를 누르다니요
무언가 오묘한(?) 상상을 하고 있으신 것 같은데
https://www.abc123.co.kr/test.php <--이 주소지의 화일을 호출하는 것이지 받는측에서
test.php를 브라우저로 실행해놓고 기다리고 있는 것이 아닙니다

받는 측에서 test.php를 브라우저로 열어놓고 기다리고 있어도 아무일도 일어나지않습니다
또한 F5를 누른다고 전송 되어 오는 것도 아니고 전송값을 가져오는 것도 아닙니다
form에 값들을 넣어서 서버에 post로 전송하는 것과 같다고 했잖습니까

그누보드 게시판에서 글쓰기 하면 서버로 전송될 뿐 홈페이지에 접속한 누군가에게
전달 되는 것이 아니듯이 말입니다
서버의 디비 테이블에 등록을 하고(test.php역할) 사용자는 등록 된 내용을 보는 페이지를
열어야 내용을 볼 수 있는 것처럼 curl로 전송을 해도 마찬가지입니다

test.php에서  echo $_POST~~ 한다고 해서 받는측 브라우저에 보이는 것이 아닙니다
echo $_POST한 내용은 $response에 html페이지 내용으로 담기어 보낸측에 전달 됩니다

그러므로 실제로는 test.php에서 echo ~~이런 처리는 아무 의미도 없습니다
어떻게 전달 되는지 보내는 측에서 확인하는 용도 정도....
받는측에서는 디비에 저장하거나 화일로 만들거나 하는 처리를 test.php에다 코딩을 해야죠
그런 후 마지막에 echo 'OK';를 넣어주면 보낸측에 OK가 $response에 값으로 전달됩니다

return $response;

지우시고

print_r($response);

이렇게 하면 값이 어떻게 나오는지 보세요.

$decode = json_decode($response, true);

 

echo $decode['storeName'];

 

이렇게 하면 되려나요?

오랜만에와서 가물가물..

요청페이지<->받는페이지

1. 요청페이지 : curl로 받는페이지(url) 호출. 호출 시 CURLOPT_POSTFIELDS 에 넘길항목 정의함

1-1. 받는페이지에서 값을 떨궈주면.. 요청페이지에서 return값을 사용할 수 있음(CURLOPT_RETURNTRANSFER, 1 일경우.. 변수에 담아서 처리)

2. 받는 페이지 : 넘어온 값을 받아서 처리...

json데이터는 윗 댓글처럼 json_decode처리하심되고요..  

 

참고

1. http://docs.php.net/manual/kr/book.curl.php

2. 구글서치 : curl get post json

3. curl은 다차원배열 허용하지 않음. 

  - http_build_query

  - serialize() / unserialize()

  - json_encode() / json_decode()

답변감사합니다.

그러면 제가
$post로 보냈으니 받는 url에서 $post로 사용이 가능하고
echo 결과값;

으로 리턴해주면

처음에 보낸 요청페이지에서는
$response를 사용하면되는건가요?

죄송합니다 안되가지고 다시 여쭤볼꼐요 ㅠㅠ

요청.php


$data = array(
"ClientId" => "abc",
"ClientSecret" => "1234"
); 
$data_string = json_encode($data);
$url = 'https://www.abc.oc.kr/test.php';
.. 생략
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);


받는.php

$decode = json_decode($data_string);

echo $decode;


요청.php

echo $response;

이렇게 햇는데 어디가 문제일까요?

rlawhd //

 

json 인경우..

요청페이지 옵션추가 : curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json', 'Content-Type: application/json'));

 

받는 쪽..

$decode = json_decode(file_get_contents('php://input'));

var_dump($decode);

 

감사합니다 이렇게 하니깐 보내는쪽에서 echo $response 찍으니깐 나옵니다

근데 이제 보내는쪽은 다른사람이고 제가 받는쪽입장인데

받는쪽에서 제대로 왔는지 테스트해보려면 어떻게 해야할까요?

현재는 보내는쪽이 success되면 출력만 됩니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 61,339
© SIRSOFT
현재 페이지 제일 처음으로