2012-03-18 3 views
4

json_decode GET 요청에서받은 서버 측 API에 대한 응답을 보내려고하지만 빈 문자열이 다시 나타납니다. JSON 디코더가 처리 할 수없는 모든 헤더 정보가 응답에 포함되어 있으므로 가정 할 때 맞습니까? 이것은 내가 내 서버에서 전체 응답 얻고있다 :헤더가있을 때 GET 응답에서 JSON을 구문 분석합니다.

HTTP/1.1 200 OK 
Server: nginx/1.0.5 
Date: Sun, 18 Mar 2012 19:44:43 GMT 
Content-Type: application/json 
Connection: keep-alive 
Vary: Accept-Encoding 
X-Powered-By: Servlet/3.0; JBossAS-6 
Content-Length: 97 

{"pid":"162000798ab8481eaeb2b867e10f8849","uuid":"973b8722c75a4cacb9fd2316517587bb"} 

내가 클라이언트에 대한 응답을 보내기 전에 내 서블릿에서 헤더를 제거해야합니까?

답변

7

예, 은 으로 전달되어야합니다. 디코딩 할 JSON 데이터는입니다. 당신은 컬을 사용하고 있기 때문에, 당신은 단순히

curl_setopt($ch, CURLOPT_HEADER, false); 

업데이트 같은 것을 당신에게 헤더를 반환하지 않도록 요청을 구성 할 수 있습니다 당신이 그 위를 잘라하지 않습니다 이전 처리를 위해 헤더를 필요로하는 경우. 그러나 응답의 머리글과 본문 사이에 이중 줄 바꿈 문자가있을 것이라는 이점을 이용하여 언제든지 쉽게 제거 할 수 있습니다. 이 같은 explode을 사용하면 다음 몸을 분리합니다

list(,$body) = explode("\n\n", $response, 2); 
+0

내가 요청에 헤더를 보내하지만 난 구문 분석 할 수 있도록 응답에서 제거 할 필요 JSON 만 curl_setopt ($ ch, CURLOPT_HEADER, 0); 요청에서 헤더 정보도 제거 하시겠습니까? – travega

+0

@travega : 예, 그러면 작동하지 않습니다. 나는 해결책을 제시하기 위해 답을 업데이트했다. – Jon

+0

대단히 감사합니다. :) – travega

0
json_decode(@file_get_contents('php://input'), true) 
0

JSON 응답은 헤더를 디코딩 할 수 없습니다. 따라서 다음과 같은 코드를 사용하여 응답 헤더를 비활성화 할 수 있습니다

curl_setopt($handle, CURLOPT_HEADER, false); 

당신이 curl_getinfo 기능을 사용할 수 있습니다 헤더에있는 정보를 사용하기 위해. 예, 사용 HTTP 상태 코드를 얻을 경우 : 추가 옵션을 보려면

curl_getinfo($handle, CURLINFO_HTTP_CODE) 

여기에서 얻을 정보 설명서를 참조하십시오 http://php.net/manual/en/function.curl-getinfo.php

관련 문제