C/C++ 애플리케이션에서 Libcurl 사용
11338 단어 tutorialccurltodayilearned
즉, curl 자체는 libcurl을 둘러싼 래퍼일 뿐입니다. 라이브러리는 C로 작성되었으며 잘 문서화된 API가 있습니다. 이 게시물에서는 C/C++ 응용 프로그램에서 HTTP 요청을 만들기 위해 libcurl을 사용하는 방법을 보여줍니다.
시작하기 전에 C 컴파일러가 설치되어 있는지 확인하십시오. 나는 gcc를 사용할 것이다. 다른 컴파일러도 작동하지만 제공된 Makefile을 수정해야 합니다. 또한 curl 및 libcurl이 설치되어 있어야 합니다. Linux 및 OSX에서 CLI에서 curl 명령을 사용할 수 있다면 잘해야 합니다.
간단한 Makefile을 만드는 것으로 시작하겠습니다.
메이크파일
default: build
build: clean
gcc -Wall -o curl main.c util.c -l curl
clean:
rm -rf curl
test: build
./curl https://freegeoip.app/json/
이제 애플리케이션으로 이동합니다. URL을 인수로 받아 HTTP Get 요청을 하고 응답을 출력하는 간단한 CLI 도구입니다.
코드는 다음과 같습니다.
메인.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#include "util.h"
int main(int argc, char *argv[]) {
if( argc != 2 ) {
printf("usage: try './curl [url]' to make a get request.\n");
return 1;
}
CURL *curl_handle;
CURLcode res;
struct MemoryStruct chunk;
chunk.memory = malloc(1);
chunk.size = 0;
curl_handle = curl_easy_init();
if(curl_handle) {
curl_easy_setopt(curl_handle, CURLOPT_URL, argv[1]);
curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");
res = curl_easy_perform(curl_handle);
if(res != CURLE_OK) {
fprintf(stderr, "error: %s\n", curl_easy_strerror(res));
} else {
printf("Size: %lu\n", (unsigned long)chunk.size);
printf("Data: %s\n", chunk.memory);
}
curl_easy_cleanup(curl_handle);
free(chunk.memory);
}
return 0;
}
util.h
#ifndef UTIL_H
#define UTIL_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct MemoryStruct {
char *memory;
size_t size;
};
size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp);
#endif
util.c
#include "util.h"
size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) {
size_t realsize = size * nmemb;
struct MemoryStruct *mem = (struct MemoryStruct *)userp;
char *ptr = realloc(mem->memory, mem->size + realsize + 1);
if(ptr == NULL) {
printf("error: not enough memory\n");
return 0;
}
mem->memory = ptr;
memcpy(&(mem->memory[mem->size]), contents, realsize);
mem->size += realsize;
mem->memory[mem->size] = 0;
return realsize;
}
여기서 가장 흥미로운 함수는
curl_easy_setopt
입니다. curl
클라이언트의 인스턴스에 다양한 옵션을 설정합니다(내 예에서는 curl_handle
). CURLOPT_WRITEFUNCTION
및 CURLOPT_WRITEDATA
를 설정함으로써 curl_handle
응답 데이터를 쓰기 위한 사용자 지정 논리 및 위치를 사용하도록 구성했습니다.마찬가지로 사용자 정의 헤더 또는 HTTP Post 페이로드를 설정할 수 있습니다. 사용 가능한 모든 옵션 목록은 curl docs 을 참조하십시오.
Reference
이 문제에 관하여(C/C++ 애플리케이션에서 Libcurl 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hi_artem/using-libcurl-in-c-c-application-4668텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)