curl은 데이터 전송과 관련된 프로그램의 빠른 작성을 위해서 사용하는 command line tool입니다.
HTTP, FTP, LDAP, TELNET, HTTPS, DICT와 같은 프로토콜을 지원하며, SSL을 가지는 각각의 프로토콜 역시 지원합니다.
또한 HTTP기반의 upload, proxies, cookies, user+password 인증을 사용할 수도 있습니다.

이러한 툴의 제공과는 별도로 위의 프로토콜들을 지원하는 클라이언트의 제작을 도와주기 위한 libCURL을 제공합니다.
libCURL을 이용하면 데이터 전송과 관련된 프로그램을 빠르게 작성할 수 있습니다.

다운로드 : http://curl.haxx.se/


1. VC++에 설치하기
위 사이트에서 다운로드를 받은 압축파일을 풀면 아래 그림과 같이 dsw파일이 있는 것을 확인할수 있습니다.
(dsw파일은 비쥬얼 스튜디오 6.0의 워크스페이스 파일입니다.)


워크스페이스를 열면 아래와 같이 2개의 프로젝트가 존재하는데, libcurl을 빌드하면 라이브러리 파일을 얻을수 있습니다.
별도의 준비과정없이 바로 프로젝트가 빌드됩니다.


빌드가 완료되면 DLL-Debug(또는 DLL-release) 폴더 안에,  아래 그림과 같이 lib와 dll파일이 생성됩니다.
(디버그의 경우 postfix로 d가 붙습니다.)




2. 프로젝트에 링크하기
프로젝트의 추가 라이브러리 디렉터리에 위에서 빌드한 lib와 dll파일이 위치한 경로를 입력하고, 추가 종속성으로 lib파일명 을 입력한 후, libcurl의 헤더파일을 추가합니다.

아래 그림과 같은 헤더파일은 include 디렉터리 안에 존재합니다.




3. 예제 코드
프로젝트 셋팅이 완료되었으면 아래와 같은 예제 코드를 작성해 실행할 수 있습니다.
#include "stdafx.h"
#include <iostream>

#include "curl/curl.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	curl_global_init(CURL_GLOBAL_ALL);
	
	CURL *ctx = curl_easy_init();
	if( ctx == NULL ) {
		cout << "Unable to initialize cURL interface" << std::endl;
		return -1;
	}
	
	curl_easy_setopt(ctx, CURLOPT_URL, "http://www.daum.net");
	curl_easy_setopt(ctx, CURLOPT_NOPROGRESS, 1);

	curl_easy_setopt(ctx, CURLOPT_WRITEHEADER, stdout);
	curl_easy_setopt(ctx, CURLOPT_WRITEDATA, stdout);

	const CURLcode rc = curl_easy_perform(ctx);
	if( rc != CURLE_OK ) {
		cout << "Error from cURL: " << curl_easy_strerror(rc) << std::endl;
		return -1;
	}
	else {
		double statDouble;
		long statLong;
		char *statString = 0;

		if( CURLE_OK == curl_easy_getinfo(ctx, CURLINFO_HTTP_CODE, &statLong) ) {
			cout << "Response code:  " << statLong << endl; 
		}

		if( CURLE_OK == curl_easy_getinfo(ctx, CURLINFO_CONTENT_TYPE, &statString) ) {
			cout << "Content-Type:  " << statString << endl; 
		}

		if( CURLE_OK == curl_easy_getinfo(ctx, CURLINFO_SIZE_DOWNLOAD, &statDouble) ) {
			cout << "Download size:  " << statDouble << endl; 
		}

		if( CURLE_OK == curl_easy_getinfo(ctx, CURLINFO_SPEED_DOWNLOAD, &statDouble) ) {
			cout << "Download speed:  " << statDouble << endl; 
		}

	}
	
	curl_easy_cleanup(ctx);
	curl_global_cleanup();
	return 0;
}
보다 자세한 내용은 아래 페이지에서 확인할 수 있습니다.

'프로그래밍 > 오픈소스' 카테고리의 다른 글

Hibernate @NotFound 어노테이션  (0) 2012.12.05
이클립스에 GlassFish 설치하기  (0) 2011.02.17
SQLite with Eclipse  (1) 2010.05.06
SWF파일 분석 도구  (0) 2010.04.13
boost library 설치  (0) 2010.03.17
libcurl 사용하기  (0) 2010.03.15
SQLite  (3) 2009.09.11
ACE(ADAPTIVE Communication Environment)  (0) 2009.09.03
MySQL++  (0) 2009.08.21
C++ 암복호화 라이브러리 Crypto++  (0) 2009.08.20
C/C++ XML Parser TinyXml  (1) 2009.08.20
Posted by devop
TAG , , ,

댓글을 달아 주세요