닥치고 위키.
http://en.wikipedia.org/wiki/Libcurl
소켓을 몰라도, 셀렉트를 몰라도 네트워크 프로그래밍이 가능하다. 오만가지 L7 프로그래밍을 쉽게 도와주는 L7 라이브러리 정도로 생각하면 된다.
일단 빌드.
http://curl.haxx.se/download.html
방문해 보면 참 오지랖도 넓은 툴킷이라는 것을 알 수 있다. 삼라만상 니가 짱이셈.
./configure --help 때려서 자기가 할 일을 정한 후.
대충 make all install
빌드가 끝났으면 curl 단독 툴로서 사용해보자.
단, 프락시 있다면 프락시 지정하는 방법이 따로 있음.
libcurl 로서의 예제를 봅시다.
http://curl.haxx.se/libcurl/
#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
#include <stdlib.h>
typedef struct mmm {
char *memm;
size_t size;
} MemoryStruct;
void * myrealloc(void *ptr, size_t size)
{
if(ptr)
return realloc(ptr,size);
else
return malloc(size);
}
size_t func(void *ptr, size_t size, size_t nmemb, void * stream);
int main(int argc, char ** argv)
{
FILE *fp;
CURL * curl;
CURLcode res;
MemoryStruct chunk;
chunk.memm=NULL;
chunk.size=0;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if(curl)
{
printf("url = %s\n", argv[1]);
curl_easy_setopt(curl, CURLOPT_PROXY, "http://니 프락시 써라.. ");
curl_easy_setopt(curl,CURLOPT_URL,argv[1]);
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,func);
curl_easy_setopt(curl,CURLOPT_WRITEDATA,(void *) &chunk);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
fp = fopen("ttt.jpg", "wb");
fwrite(chunk.memm, 1, chunk.size, fp);
fclose(fp);
fprintf(stdout,"%s\n",chunk.memm);
}
if(chunk.memm)
{
free(chunk.memm);
chunk.size=0;
}
return 0;
}
size_t func(void *ptr, size_t size, size_t nmemb, void * stream)
{
size_t realsize=size*nmemb;
// fprintf(stdout,"%d %d\n",size,nmemb);
MemoryStruct * mem = (MemoryStruct *)stream;
mem->memm = (char *)myrealloc(mem->memm, mem->size+realsize+1);
if(mem->memm) {
memcpy(&(mem->memm[mem->size]), ptr, realsize);
mem->size += realsize;
mem->memm[mem->size]=0;
}
return realsize;
}
예제 사용법 : simple http://니잘가는주소/니좋아하는사진.jpg
TCP/IP를 쉽게 공부하고 싶다면.
두꺼운 책이 무섭다면.
다음 책을 추천.
TCP/IP 소켓 프로그래밍
Michael J. Donahoo & Kenneth L. Calvert 지음, 박준철 옮김/사이텍미디어(희중당)
https://www.aladin.co.kr/shop/wproduct.aspx?ISBN=8955507550&ttbkey=ttbdawnsea1337002©Paper=1
것도 귀찮으면 걍 비제이 문서를 보자.
http://www.beej.us/guide/bgnet/output/html/multipage/index.html