WinHTTP를 쓰려다가 좌절하고… boost::asio로 작성.
#include "HttpClient.h"
void main()
{
    std::wcout.imbue( std::locale("") );
    AsioHttp::Client client;
    client.Init( "leafbird.net", CP_UTF8 );
    std::wcout << client.Request( "/index.php" ).strData << std::endl;
}

개인 프로젝트에 쓰려고 심플하게 만들었다. 이왕에 asio 사용한 김에 format같은 다른 모듈도 내부에서 사용했음. asio를 한 번도 써 본적도 없고 공부한 적도 없는데, 돌아다니다 보니 http client로 사용하는 예제 코드가 있길래 그냥 그것 기반으로 인터페이스만 정리했다.

http client를 알아볼 때 내가 단골 손님으로 들던 예제가 Naver OpenAPI인데, 이 물건으로 네이버 검색을 하려면 아래처럼 한다.

#include "HttpClient.h"
void main()
{
    std::wcout.imbue( std::locale("") );
    AsioHttp::Client client;
    // call Naver OpenAPI
    client.Init( "openapi.naver.com", CP_UTF8 );
    boost::format fmt( "/search?key=%1%&query=%2%&display..." );
    fmt % "개인 개발자 등록키 값"
        % AsioHttp::ToUrlString( "안철수" );
    std::wcout << client.Request( fmt.str().c_str() ).strData;
}

검색어로 한글을 쓰려고 보니 유의해야 할 점이 하나 있던데, UTF8 인코딩 문자만 받는다는 것. 근데 URL에서의 인코딩 문자 데이터 표기방식이 일반적으로 C++에서 쓰는 바이트 정보랑 다르다. ‘안철수’라는 문자를 UTF8로 인코딩한 후  std::string에 담은 값을 바이트 단위로 다시 ‘%’를 붙여서 문자열화 해야 됨. 바이트 데이터가 0xaa 0xbb 0xcc 0xdd 0xee 0xff라면 ‘%aa%bb%cc%dd%ff’처럼 바꿔야 한다는 말이다. 그래서 ToUrlString(...) 이라는 유틸리티 함수도 같이 만들어 두었다. 궁금한 사람은 직접 코드 열어보시오.

만약에 이 물건으로 C++ 프로젝트에서 AJAX 통신을 하겠다고 한다면, response 데이터의 처리가 문제다. 데이터 형식이 json 아니면 xml이 될 텐데.. 이전 포스팅에서도 설명했듯이 C++에서는 두 포맷 모두 심플하게 다루는 게 쉽지가 않다. 취미로 만드는 게임 엔진에 랭크 기능을 웹서버로 만들어 붙이고 통신할 목적으로 만들었는데… response를 어떻게 처리할지는 좀 더 생각해 봐야지.

See Also:


Posted by leafbird 트랙백 0 : 댓글 1

댓글을 달아 주세요

  1. addr | edit/del | reply Favicon of https://devnote.tistory.com BlogIcon leafbird 2015.01.21 18:37 신고

    gist에 넣었어요. https://gist.github.com/leafbird/db5d0c2826355cc4487c

2010년 7월 25일.
boost 1.43.0 버전 설치 로그 작성.

기존에 boost 설치할 때마다 적던 스레드가 있지만 ( http://devnote.tistory.com/82 )
너무 오래된 것 같고, 예전 버전 정보는 거의 필요가 없어져서 새로 작성한다.

빌드 머신 / 시스템 환경
Windows 7 Professional (64bit)
AMD Phenom(tm) 9550 Quad-Core Processor 2.20 GHz / 4 Gb RAM

1.41버전에서는 tar.gz 파일을 받을 때 압축이 제대로 풀렸는데...
이번엔 tar.gz를 풀면 asio 경로에서 에러가 발생한다. (압축시대 #4007 사용함)
zip 파일을 받으면 문제없이 압축 풀림.

boost-jam-3.1.18-1-ntx86.zip 파일을 받아 bjam.exe를 복사하고,
명령창에 아래와 같이 실행
bjam -j8 --prefix=D:\boost --toolset=msvc --build-type=complete install > buildhistory.txt

vs2008, vs2010이 동시에 설치되어 있는데, 저렇게 입력해주면 vs2010 버전 라이브러리가 생긴다.
2008에서 쓰려고 한건데... ㅡㅜ

처음에는 cpu 한 개만 사용하면서 (전체 사용률 25%) 메모리만 조금 잡아먹다가,
시간이 어느 정도 지나야 cl.exe가 다수 호출되면서 cpu를 full로 사용하게 된다 (전체 사용률 100%).

빌드 과정에 걸린 시간은 5:01 ~ 5:32. (총 소요시간 31분.)

vs2008 용으로 빌드하고 싶다면 toolset 옵션을 아래처럼 수정한다.

bjam -j8 --prefix=D:\boost --toolset=msvc-9.0 --build-type=complete install > buildhistory.txt

빌드 과정에 걸린 시간은 ...5:32 ~ 6:00 (총 소요시간 28분. )



2010년 11월 06일, 회사 개발망 PC에서 다시 빌드.
빌드 머신 / 시스템 환경
  • Windows Server 2008 R2 Standard
  • Inter(R) Core(TM) i7 CPU 2.67GHz / 12.0Gb Ram

2010 빌드 시간 20분 ( 10:20 ~ 10:40 )
2005 빌드 시간 16분 ( 10:42 ~ 10:58 )
햐... 코어 8개로 빌드하니 뭔가 다르다 (+_+)b

vs2005, vs2010 같이 설치 되어 있을 때, 2005로 빌드하고 싶으면 아래처럼 실행.
bjam -j8 --prefix=D:\boost --toolset=msvc-8.0 --build-type=complete install > buildhistory.txt



2012년 2월 18일, 집에서 1.48 빌드.
빌드시간 44분 걸림. 중간에 좀 땃진을 하긴 했지만.. 그것 빼고도 빌드시간이 좀 늘어난 것 같다.



TAG bjam, boost
Posted by leafbird 트랙백 1 : 댓글 0

댓글을 달아 주세요

지난주 화요일에 팀 내 프로그램 파트에서 진행했던 기술 세미나의 발표자료 입니다.

예전에는 자체적인 세미나가 있었지만, 이번 팀에서는 별다른 세미나가 없습니다. 개인 시간을 할애해서 기술 공유를 위해 팀 내에서 발표 시간을 가졌는데, 다행히 반응이 나쁘지 않았습니다 :)

앞으로 몇 차례 이런 자리를 가질 예정입니다. 쉬운 난이도의 흥미 위주 주제부터, 나중에는 좀 더 심화된 내용까지 다룰 예정이고, 준비한 자료는 이 곳에 공유하도록 하겠습니다.

TAG boost
Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

2010년 1월 18일.
WinXP 32bit. / vc-80 환경에서 boost 1.41 설치 시도.
7z 파일을 빵집으로 열면 오류가 발생하는 것 같다. (http://www.gpgstudy.com/forum/viewtopic.php?p=123335) 링크에는 알집의 오류를 이야기 하고 있지만, 빵집도 마찬가지 인듯.
tar.gz 파일을 받아 설치하면 문제없이 설치된다.

tar.gz 파일을 열고 bootstrap.bat를 실행해도 bjam.exe는 제대로 만들어지지 않았다. 한참동안 무언가를 처리하다가 "입력 줄이 너무 깁니다. 명령 구문이 틀립니다."라는 오류를 내고 끝난다.

build 되어있는 bjam.exe를 받아서 폴더 안에 넣고, 커맨드창을 열어 (비주얼 스튜디오 프롬프트가 아니어도 됨) -j8 을 추가해 아래의 명령으로 빌드한다. (http://bspfp.pe.kr/87)
D:\libraries\boost_1_38_0>bjam -j8 --prefix=D:\boost --toolset=msvc --build-type=complete install define="_SCL_SECURE_NO_WARNINGS=0" define="_HAS_ITERATOR_DEBUGGI
NG=0" define="_SECURE_SCL=0" > buildhistory.txt

2010년 1월 18일. WinXP 32bit / vc-80 / quad-core에서 35분 걸림. (18:15 ~ 18:50)


1.37 버전 이후 (글 작성 시점 기준 현재 1.38) 버전의 bjam command line option에 대해서는
http://www.boost.org/doc/libs/1_38_0/more/getting_started/windows.html#or-build-binaries-from-source
을 참고. 아래 명령대로 하면 모든 CRT 모드의 lib를 만들어내지 않는다.

D:\libraries\boost_1_38_0>bjam --build-dir=D:\boost\ --toolset=msvc --build-type
=complete stage define="_SCL_SECURE_NO_WARNINGS=0" define="_HAS_ITERATOR_DEBUGGI
NG=0" define="_SECURE_SCL=0" > buildhistory.txt

D:\libraries\boost_1_38_0>

(2009. 2. 11. Vista 32bit, vc-80 에서 빌드하는데 한시간 반 걸림 (2:57 ~ 4:21) )
(2009. 8. 13. Vista 32bit, vc-80 에서 1.39 빌드하는데 한시간 20분 걸림 (1:39 ~ 2:59) )

http://shuaihan.egloos.com/1751773


BOOST 라이브러리 사이트 : http://www.boost.org
 
1. Download

   boost 파일 : http://sourceforge.net/project/showfiles.php?group_id=7586
   bjam 파일 : http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=72941&release_id=423149

   * 각각 다운로드 받은 후 압축을 해제 합니다.(boost_1_34_1)
   * Visual studio 2005 를 사용하신다면 bjam 파일을 반드시 다운로드 받습니다.(boost-jam-3.1.14)


2. bjam.exe 를 생성한다.

   a. Visual studio 6.0 일 경우
      $boostDir/tool/build/jam_src/build.bat  실행한다.
      -> $boostDir\tools\jam\src
      $boostDir/tool/build/jam_src/bin.ntx86/bjam.exe  파일 생성 된것을 확인한다.
    b. visual studio 2005 일 경우
      $boostJamDir/build.bat 실행한다.
      $boostJamDir/bin.ntx86/bjam.exe 파일 생성된것을 확인한다.

3. bjam.exe 파일을 $boostDir 로 이동합니다.

   $boostDir 폴더에는 boost-build.jam 파일이 있어야 합니다.


4. $boostDir 로 이동한후 아래 명령을 실행시킵니다.

   a. visual studio 6을 사용할 경우
       bjam --prefix=d:\boost "-sTOOLS=msvc" install

   b. visual studio 2005 을 사용할 경우
       bjam --prefix=d:\boost "-sTOOLS=vc-8_0" install > build_history.txt

      ※ VC8 에서 빌드를 하다보면 libs/regex/src/regex_traits_defaults.cpp에서
         charset 문제로 인한 에러가 발생합니다. 아마 OS 로케일이 동아시아쪽일
         경우에 발생하는 것으로 보입니다.
         이 문제는 http://boost.cvs.sourceforge.net/boost/ 에서 해당 파일을
         다운로드 받아 다시 빌드하면 해결됩니다.
         에러가 발생한 위치는  build_history.txt 파일을 열어 보면 됩니다.


   * TOOLS 옵션으로는 -msvc, -vc7, vc-8_0이 존재합니다.
      http://www.boost.org/more/getting_started.html#step2


   * 참고) 컴파일 시간이 무지 오래 걸립니다... .......


  ※ Boost와 STLport의 혼용
     Boost는 내부에서 STL라이브러리를 사용합니다. VC로 boost를 빌드하는 경우 VC와
     함께 설치되는 STL라이브러리나 STLport 중 하나를 선택해 빌드해야 합니다.
     하지만 VC8(VS.NET 2005)로 빌드할 경우에는 STLport를 사용할 수 없습니다.
     따라서, boost 라이브러리를 사용한다면 차라리 STLport를 설치하지 않는 것이
     include 설정에 대한 혼동을 막을 수 있습니다.


. d:\boost 폴더에서 include 파일과 lib 파일이 있는지 체크 합니다.
    * lib 폴더에는 반드시 컴파일된 dll, lib 파일이 있어야 합니다.


6. Visual studio 에서 boost 폴더 참조 시키기.
   a. visual studio 6 일 경우

      도구 -> 옵션 -> ... (프로그램을 삭제해서 기억 안남)

   b. visual studo 2005 일 경우

      도구 -> 옵션 -> 프로젝트 및 솔루션  -> VC++ 디렉터리 ->
      [우측화면]  다음파일의 디렉터리 표시 ->
         1. 포함파일 선택 -> D:\boost\include\boost-1_33_1 추가
         2. 라이브러리 파일 선택 -> D:\boost\lib 추가
       -> 확인

 

이상으로 설치 및 설정 방법에 대해 설명을 마치겠습니다.

 

TAG bjam, boost, JAM
Posted by leafbird 트랙백 1 : 댓글 0

댓글을 달아 주세요