본문으로 바로가기

MinGW에서 libcurl로.. http 페이지 긁어오는 걸 테스트해 봄..
static 빌드시에.. curl.h 파일 include 전에 CURL_STATICLIB define 필요.

#include <stdlib.h>
#include <stdio.h>
#define CURL_STATICLIB
#include <curl/curl.h>
 
struct url_data {
    size_t size;
    char* data;
};
 
size_t write_data(void *ptr, size_t size, size_t nmemb, struct url_data *data) {
    size_t index = data->size;
    size_t n = (size * nmemb);
    char* tmp;
 
    data->size += (size * nmemb);
 
#ifdef DEBUG
    fprintf(stderr, "data at %p size=%ld nmemb=%ld\n", ptr, size, nmemb);
#endif
    tmp = realloc(data->data, data->size + 1); /* +1 for '\0' */
 
    if(tmp) {
        data->data = tmp;
    } else {
        if(data->data) {
            free(data->data);
        }
        fprintf(stderr, "Failed to allocate memory.\n");
        return 0;
    }
 
    memcpy((data->data + index), ptr, n);
    data->data[data->size] = '\0';
 
    return size * nmemb;
}
 
char *handle_url(char* url) {
    CURL *curl;
 
    struct url_data data;
    data.size = 0;
    data.data = malloc(4096); /* reasonable size initial buffer */
    if(NULL == data.data) {
        fprintf(stderr, "Failed to allocate memory.\n");
        return NULL;
    }
 
    data.data[0] = '\0';
 
    CURLcode res;
 
    curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);
        res = curl_easy_perform(curl);
        if(res != CURLE_OK) {
                fprintf(stderr, "curl_easy_perform() failed: %s\n", 
                        curl_easy_strerror(res));
        }
 
        curl_easy_cleanup(curl);
 
    }
    return data.data;
}
 
int main(int argc, char* argv[]) {
    char* data;
    data = handle_url("http://www.findip.kr");
 
    if(data) {
        printf("%s\n", data);
        free(data);
    }
 
    return 0;
}

 

$ gcc http.c -o http.exe -lcurl -lws2_32 -lcrypt32 -lssh2 -lssl -lcrypto -lgdi32 -lwldap32 -lz

'블로그 (Blog) > 개발로그 (Devlogs)' 카테고리의 다른 글

Simple Dynamic Strings  (0) 2024.03.15
Duktape  (0) 2024.03.15
SMTP 서버 + 보안연결 메일 보내기  (0) 2024.03.15
이름으로 프로세스 ID 찾아 죽이기  (0) 2024.03.15
gmsh를 이용한 meshing  (0) 2024.03.15