2012-06-27 2 views
1

REST를 통해 웹에 노출 된 C++ API가 있습니다. 필자는 FastCGI 프로세스로 응용 프로그램을 작성했습니다. 본문에 데이터가있는 앱에 POST를 할 수 있으며 텍스트를 가져올 수 있습니다. 하지만 이제 텍스트 대신 JSON 객체로 데이터를 반환하고 싶습니다.C++에서 HTTP POST REST 호출로 JSON 객체 반환

출력물을 JSON 파일로 패키지화했습니다. 이 요청을 요청자에게 전달하는 방법을 알아야합니다.

편집 :

나는 현재 이런 일이 : 나는 printcontent (문자열) 함수에서 텍스트를 인쇄하고,이에 http://pastebin.com/vhC30kTJ

합니다. cout을 사용하여 인쇄중인 텍스트는 FastCGI에 의해 HTTP 요청자에게 다시 전달됩니다. 대신 JSON을 전달하고 싶습니다. 어떻게해야할지 모르겠습니다. JSON 파일에 데이터를 쓸 수 있습니다. JSON 파일을 다시 전달하거나 json 스타일 문자열을 전달합니까? 나는 혼란 스럽다.

+0

이미 시도한 코드를 추가 할 수 있습니까? – peacemaker

답변

1

이상적으로 JSON을 구성하는 함수는 std::ostream &의 매개 변수를 받아 들여야합니다. 그런 다음 파일에 쓸 내용을 std::ofstream으로 전달하고 표준 출력 (이 경우 브라우저에서 보낼 수 있도록하려는 경우)으로 작성하려면 전달할 수 있습니다 std::cout. 필수 HTTP 헤더와 공백 행을 먼저 작성해야합니다. 그렇지 않으면 서버/브라우저가 JSON을 HTTP 헤더로 해석하려고합니다.

void makejson(ostream & output, string content) 
{ 
    /* output << "{\"some\":\"json\"}" */ 
} 

// Write to file 
ofstream file("data.json"); 
makejson(file, "somedata"); 
file.close(); 

// Write to browser 
cout << "Content-Type: application/json\r\n\r\n"; 
makejson(cout, "somedata"); 
+0

그래서 기본적으로 출력 스트림을 생성하고 그것에 쓰려고합니까? 현재 HTTP 헤더를 사용하고 있지 않으며 Ostream을 명시 적으로 정의하고 있지 않습니다. 모든 것은 FastCGI 자체에서 처리됩니다. –

+0

죄송합니다. 이전에 귀하의 답변을 오해 한 것 같습니다. 따라서, cout은 ostream으로 전달되고이 ostream 객체에 쓰면 브라우저에 데이터가 전송됩니까? 완전한! –

+0

예 - CGI가 작동하는 방식으로 표준 출력이 웹 서버로 전송되고 일부는 헤더 (예 : 헤더)를 사전 처리 한 다음 결과가 브라우저로 전송됩니다. – cdhowie

관련 문제