/cpphttpstack

c++ api for http client & server

Primary LanguageCGNU General Public License v3.0GPL-3.0

C++ HTTP stack 라이브러리

C++ STL 기반으로 HTTP 서버 및 클라이언트 개발용 라이브러리를 개발하는 프로젝트입니다.

개요

  • C++ STL 라이브러리를 이용한 HTTP 클라이언트 및 서버 라이브러리 개발

개발자 정보

본 프로젝트를 진행하는 개발자 정보는 다음과 같습니다.

라이선스

  • 본 프로젝트의 라이선스는 GPLv3 이고 기업용 라이선스는 websearch@naver.com 으로 문의해 주세요.

개발툴

  • 윈도우 : Visual C++ 2008, 2017
  • 리눅스 : g++

API 문서

폴더 설명

  • doc

    • 본 프로젝트와 관련된 문서 저장 폴더
  • HtmlParser

    • HTML 문서를 파싱/생성하는 라이브러리
  • Http2Parser

    • HTTP/2 프로토콜 파싱/생성하는 라이브러리
  • HttpNoCacheProxy

    • HTTP 캐시 기능을 사용하지 않는 HTTP Proxy 서비스
  • HttpParser

    • HTTP 프로토콜 파서/생성 라이브러리
  • HttpSimulator

    • HTTP 시뮬레이터 프로그램
  • HttpSpeed

    • 웹서버 성능 테스트 프로그램
  • HttpStack

    • HTTP 클라이언트/서버 라이브러리
    • WebSocket 서버 라이브러리
  • JsonParser

    • JSON 문자열 파싱 및 생성 라이브러리
  • openssl

    • MS 윈도우용 openssl 라이브러리
    • 리눅스 64bit openssl 라이브러리
  • Publish

    • MS 윈도우용 배포 프로그램 저장 폴더
  • SendFirebaseMessage

    • HTTP stack 기반으로 FirebaseMessage 를 전송하는 예제 프로그램
  • SipPlatform

  • TcpStack

    • TCP 클라이언트/서버 라이브러리
    • HttpStack 에서 HTTP 서버 개발에 사용된다.
  • WsdlParser

    • WSDL 문서를 파싱하는 라이브러리
  • XmlParser

    • XML 문서를 파싱하는 라이브러리
  • TestHttp2Client

    • HTTP/2 클라이언트 테스트 프로그램
  • TestHttpClient

    • HTTP/1.1 클라이언트 테스트 프로그램
  • TestHttpStack

    • HttpStack 을 이용한 간단한 HTTP/1.1 & HTTP/2 서버 샘플 프로그램
    • HttpStack 을 이용한 WebSocket echo 서버 프로그램
  • TestHttpStackMfc

    • MFC 기반으로 HttpStack 을 이용한 간단한 HTTP 서버 샘플 프로그램
  • TestWebRtc

컴파일 방법

본 프로젝트의 컴파일 방법은 다음과 같습니다.

  • VC++ 2008

    • HttpStack.sln 더블클릭한 후, 빌드한다.
    • Visual Studio 2008 버전 9.0.30729.1 SP 에서 빌드할 것을 권장합니다.
  • VC++ 2017

    • HttpStack-vs2017.sln 더블클릭한 후, 빌드한다.
  • 64bit 리눅스

    • make 를 실행하여서 빌드한다.
  • 32bit 리눅스

    • openssl 1.0.2 버전 이상의 개발 라이브러리를 설치한다.
    • make 를 실행하여서 빌드한다.

HTTP GET 요청/응답 개발 방법

HttpStack 라이브러리의 CHttpClient 클래스를 이용한 HTTP GET 프로토콜 연동하는 소스 코드 예제는 다음과 같습니다. 테스트용 샘플 소스 코드는 TestHttpClient 프로젝트의 TestHttpClientGet.cpp 파일입니다.

 CHttpClient clsClient;
 std::string strBodyType, strBody;

 clsClient.DoGet( "http://www.naver.com", strBodyType, strBody );

HTTP POST 요청/응답 개발 방법

HttpStack 라이브러리의 CHttpClient 클래스를 이용한 HTTP POST 프로토콜 연동하는 소스 코드 예제는 다음과 같습니다. 테스트용 샘플 소스 코드는 TestHttpClient 프로젝트의 TestHttpClientPost.cpp 파일입니다.

 std::string strSendBody, strRecvBodyType, strRecvBody;
 CHttpClient clsClient;
 HTTP_HEADER_LIST clsHeaderList;
 CHttpHeader clsHeader( "SOAPAction", "http://www.webserviceX.NET/GetWeather" );

 strSendBody = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://www.webserviceX.NET\">"
   "<soapenv:Header/>"
   "<soapenv:Body>"
      "<web:GetWeather>"
         "<web:CityName>seoul</web:CityName>"
         "<web:CountryName>kr</web:CountryName>"
      "</web:GetWeather>"
   "</soapenv:Body>"
  "</soapenv:Envelope>";

  clsClient.DoPost( "http://www.webserviceX.NET/globalweather.asmx", &clsHeaderList, "text/xml;charset=UTF-8", strSendBody.c_str(), strRecvBodyType, strRecvBody );

HTTP SOAP 요청/응답 개발 방법

HttpStack 라이브러리의 CHttpClient 클래스를 이용한 웹 서비스 연동하는 소스 코드 예제는 다음과 같습니다. 테스트용 샘플 소스 코드는 TestHttpClient 프로젝트의 TestHttpClientSoap.cpp 파일입니다.

 std::string strSendBody, strRecvBody;
 CHttpClient clsClient;

 strSendBody = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://www.webserviceX.NET\">"
   "<soapenv:Header/>"
   "<soapenv:Body>"
      "<web:GetWeather>"
         "<web:CityName>seoul</web:CityName>"
         "<web:CountryName>kr</web:CountryName>"
      "</web:GetWeather>"
   "</soapenv:Body>"
  "</soapenv:Envelope>";

 clsClient.DoSoap( "http://www.webserviceX.NET/globalweather.asmx", "http://www.webserviceX.NET/GetWeather", strSendBody.c_str(), strRecvBody );

초간단 HTTP 서버 개발 방법

초간단 HTTP 서버 개발 소스 코드 예제는 TestHttpStack 프로젝트에 있습니다. TestHttpStack 프로젝트 소스 코드를 참고하시면 CHttpStack 을 이용하여서 어떻게 HTTP 서버를 개발할 수 있을지 확인하실 수 있습니다.

WSDL 문서로 SOAP 통신용 클래스 생성 방법

WSDL 파일을 읽어서 SOAP 통신용 클래스 생성하는 소스 코드 예제는 다음과 같습니다. 테스트용 샘플 소스 코드는 TestWsdlParser 프로젝트를 확인해 보세요.

 CWsdlMessage clsWsdl;

 if( clsWsdl.ParseFile( "globalweather.xml" ) == false )
 {
  printf( "clsWsdl.Parse error\n" );
 }
 else
 {
  clsWsdl.GetSoap()->MakeSource( NULL );
 }

생성한 SOAP 통신용 클래스로 SOAP 통신하는 방법

위에서 WSDL 문서로 생성한 SOAP 클래스로 SOAP 통신하여서 응답을 수신하는 소스 코드는 다음과 같습니다.

 CSoapGlobalWeatherSoap clsSoap;
 std::string strInput, strOutput;

 strInput = "korea";

 if( clsSoap.GetCitiesByCountry( strInput, strOutput ) == false ) return false;

 printf( "[%s]\n", strOutput.c_str() );

JSON 문자열 파싱 및 생성하는 방법

TestJsonParser 폴더의 소스 코드를 참고하세요.

관련 포스트