2013-07-16 2 views
0

API를 작성하는 중이지만 cURL로 테스트 할 때 몇 가지 문제가 발생했습니다.JSON을 게시 할 때 cURL 헤더 문제가 발생했습니다.

내 코드는 다음과 같습니다의 URL 엔드 포인트에서

$people = array(array('name' => urlencode('casper'), 
         'shoesize' => urlencode(41) 
        ), 
       array('name' => urlencode('charlotte'), 
         'activated' => urlencode(1) 
        ) 
     ); 

$data = http_build_query(array('data' => json_encode($people))); 
$url = '...'; 

$ch = curl_init($url); 

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept: application/json', 
    'Content-Type: application/json', 
    'Connection: Keep-Alive' 
)); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$result = curl_exec($ch); 

curl_close($ch); 

return $result; 

방법은 단지 $ _POST [ '데이터'] 반환합니다.

내 머리글을 cURL로 설정할 때까지이 방법이 계속 작동합니다. 설정하지 않으면 데이터가 문제없이 전달됩니다.

+0

정확히 무엇이 문제입니까? 당신은 헤더없이 잘 작동한다고 언급하지만, 그들에게 잘못된 것은 무엇입니까? –

+0

@JohnVanDeWeghe OP는 json 데이터를 사용하고 있지만 json 데이터를 올바르게 전송하지 않습니다. 아래 내 대답을 참조하십시오. – alwaysLearn

+0

문제는 요청을 올바르게 처리하기 위해 헤더 유형이 필요하다는 것입니다. 그러나 cURL로 설정할 때 데이터를 보내지 않습니다. – Stromgren

답변

0

당신이 다음 fopen('php://input','r');

를 사용

$data = http_build_query(array('data' => json_encode($people))); 

$data = json_encode($people); 

를 교체하고 대상 파일을 가져 JSON 데이터를 전송 json 헤더를 사용하거나 하나가 모든 헤더를 보내 해달라고하면 .

사용자가 볼 수 있습니다. blog

+0

내 API는 다른 데이터 형식을 처리 할 수 ​​있어야하므로 헤더가 필요합니다. 답변 해주셔서 감사합니다. 나는 왜 내가 fopen을 사용해야 만 할까? – Stromgren

+0

원하는 결과를 얻을 수 있습니까? 내가 왜 그렇게해야하는지 설명해 줄 것입니다. – alwaysLearn

+0

그런 식으로 요청을 보내면됩니다. 하지만 결과를 검색 할 수 없습니다. $ _POST를 보면 빈 배열이됩니다. fopen으로 실제로 출력하거나 PHP 배열로 변환하는 방법을 모릅니다. 마치 json_decode 데이터처럼. – Stromgren

관련 문제