Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

소개

libwww(12)는 W3C(12)에서 배포하는 라이브러리로 Unix와 Windows에서 사용가능한 Client Web API(12)를 제공한다. 이 라이브러리는 웹 브라우저/에디터, 로봇, 배치툴등에 널리 사용되고 있다. HTTP/1.1 의 기술(caching, pipelining, PUT, POST, Digest Authentication, deflate...)을 완벽하게 지원하고 있다.

문서를 만들게 된 이유는 Joinc Search 엔진프로젝트의 지원을 위함이다. libwww는 HTTP기반의 정보를 처리하기 위한 목적으로 사용할 것이며, 이를 중심으로 문서를 기술해 나가도록 하겠다.

설치

설치는 Linux(12) fedora(12) 배포판을 기준으로 한다.

아마도 필요한 패키지는 이미 설치되어 있을 것이다. 다음의 패키지가 있는지 확인해 보도록 한다.
  • w3c-libwww
  • w3c-libwww-devel
소스를 직접 설치하길 원한다면 http://www.w3.org/Library 를 방문하기 바란다.

사용

컴파일 테스트

일단 컴파일 테스트를 해보도록한다. 테스트를 위해서 간단한 코드를 만들어 보았다.
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <WWWLib.h>


int main()
{
  HTLibInit("TestApp", "1.0");
  HTLibTerminate();
  return 0;
}

다음은 위의 코드를 컴파일 하기 위한 makefile이다.
#############################################################################
# Makefile for building sample
# Generated by tmake at 20:01, 2006/01/09
#     Project: sample
#    Template: app
#############################################################################

####### Compiler, tools and options

CC	=	gcc
CXX	=	g++
CFLAGS	=	-pipe -Wall -W -O2 
CXXFLAGS=	-pipe -Wall -W -O2
INCPATH	=	-I/usr/include/w3c-libwww
LINK	=	g++
LFLAGS	=	
LIBS	=	-L/usr/lib -lwwwcore -lwwwutils

TAR	=	tar -cf
GZIP	=	gzip -9f

####### Files

HEADERS =	
SOURCES =	sample.c
OBJECTS =	sample.o
INTERFACES =	
UICDECLS =	
UICIMPLS =	
SRCMOC	=	
OBJMOC	=	
DIST	=	
TARGET	=	sample
INTERFACE_DECL_PATH = .

####### Implicit rules

.SUFFIXES: .cpp .cxx .cc .C .c

.cpp.o:
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.cxx.o:
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.cc.o:
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.C.o:
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.c.o:
	$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<

####### Build rules


all: $(TARGET)

$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) 
	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)

dist:
	$(TAR) sample.tar sample.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST)
	$(GZIP) sample.tar

clean:
	-rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET)
	-rm -f *~ core

####### Sub-libraries


###### Combined headers


####### Compile

sample.o: sample.c

libwww 구성

Libwww는 웹 클라이언트 애플리케이션을 작성하기 위한 기본적인 여러가지 함수들을 제공한다. 이 라이브러리의 가장 중요한 기능은 다양한 인터넷 서비스- HTTP(12), FTP(12), Gopher(12).. -를 제공하는 원격지 서버에 연결해서 (필요에 따라 로컬파일), 데이터를 입출력하고 해석하는 것이다.

Libwww는 C로 작성되었으며 모든 종류의 Unix(12)와 Windows(12), Mac(12)에서 사용가능하다.

비록 객체지향 모델을 지원하지 않는 C로 작성되었지만, 객체지향적으로 지향적으로 설계되어 있다.

기본 디자인

libwww는 매우 확장이 용이하게 되어 있으며, 현재 공개되어 있는 표준적인 인터넷서비스뿐만 아니라 새로운 인터넷서비스를 위한 모듈도 plug-in 방식으로 라이브러리의 주요부분의 재 코딩없이 개발할 수 있는 구조를 제공한다. 이는 dynamic linking을 이용함으로써 가능해지는데, 프로그램의 실행시간에 혹은 실행중에라도 필요한 확장이 가능하도록 되어 있다. 이는 코드의 이동성을 향상시켜주며, 애플리케이션이 필요로 하는 기능이 추가되었을 때, 인터넷을 통해서 필요한 모듈만 다운로드 받아서 간단히 기능을 확장 시킬 수 있도록 도와준다.

attachment:Design.gif

위의 그림은 libwww가 어떠한 계층을 가지고 있는지를 보여준다. 이러한 계층적 구조로 core이하의 계층을 수정하지 않고도, 필요한 기능을 추가시킬 수 있도록 해준다. 다음은 각계층들이 가지고 있는 중요 모듈에 관한 설명이다.

  • Generic Utilities
container 클래스, 스트링 유틸리티, 네트워크 유틸리티와 같은 일반적인 유틸리티 모음을 제공한다. 이 계층은 상위계층과 완전히 분리되어 있으며, 많은 macro(12)를 통하여서 플랫폼에 관계없이 간편하게 사용할 수 있도록 구성되어 있다. 또한 libwww뿐만 아니라 다른 많은 네트워크 응용을 위해서도 쉽게 재사용이 가능하도록 모듈화 되어있기도 하다.

  • Core
라이브러리의 기초가 되는 영역이다. 네트워크를 연결하고, 데이터 객체를 파싱하고, 로깅을 남기고, 유저의 입출력을 제어하기 위한 많은 함수들을 제공한다.

  • Stream Module
애플리케이션과 네트워크 사이에 통신되는 모든 데이터를 스트림객체로 만들고 이를 처리한다. 스트림객체는 문자의 집합으로 이루어지는 객체이다. ANSC C FILE의 스트림과 매우 유사하게 다룬다. 이러한 문자의 집합은 보통 작은 몇개의 문자로 다루어지지만, 성능을 위해서 큰 문자의 집합으로 처리를 한다.

  • Access Modules
인터넷 프로토콜과 관련된 모듈로써, 다양한 인터넷서비스의 프로토콜을 다루기 위한 애플리케이션의 작성을 도와준다. libwww는 기본적으로 HTTP, FTP, Gopher, WAIS, NNTP, Telnet, rlogin, TN3270 등을 다루기 위한 모듈들을 제공한다. 필요에 따라 다른 프로토콜을 처리하기 위한 모듈을 추가할 수도 있다.

  • Application Module
애플리케이션 모듈은 클라이언트 애플리케이션의 제작을 위해 필요한 history 목록 관리, 콜백함수, 로깅등과 같은 유저 인터페이스를 제공한다.

여러분은 access module, stream module, application module를 이용해서 대부분의 애플리케이션을 작성할 수 있을 것이다.

셈플 코드

제목 저자 변경일