文章目录
libcurl
链接地址:https://curl.se/libcurl/
优点:普遍使用
示例代码:
#include <curl/curl.h>
#include <iostream.h>
#include <string>
#include <stdint.h>
struct memory
{
char *response;
size_t size;
memory()
{
response = NULL;
size = 0;
}
~memory()
{
if (response)
{
delete[] response;
response = NULL;
size = 0;
}
}
};
static size_t cb(void *data, size_t size, size_t nmemb, void *userp)
{
size_t realsize = size * nmemb;
struct memory *mem = (struct memory *)userp;
char *ptr = (char*)realloc(mem->response, mem->size + realsize + 1);
if(ptr == NULL)
return 0; /* out of memory! */
mem->response = ptr;
memcpy(&(mem->response[mem->size]), data, realsize);
mem->size += realsize;
mem->response[mem->size] = 0;
return realsize;
}
int main()
{
CURL *curl = curl_easy_init();
if (!curl)
{
std::clog << "curl_easy_init call failed!" << std::endl;
return -1;
}
// set url
curl_easy_setopt(curl, CURLOPT_URL, "http://google.com/");
// set callback function
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, cb);
// set timeout
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
// set compress opt [notice: Better set it, otherwise it's download slow]
curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, "gzip"); // [br, gzip, deflate]
struct memory chunk;
/* we pass our 'chunk' struct to the callback function */
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
CURLcode res = curl_easy_perform(curl);
if (CURLE_OK != res)
{
std::clog << "error:" << curl_easy_strerror(res) << std::endl;
return -1;
}
std::clog << chunk.response << std::endl;
curl_easy_cleanup(curl);
return 0;
}
cpp-httplib
链接地址:https://github.com/yhirose/cpp-httplib.git
优点:header-only && cross platform
示例代码:
#include "cpp-httplib/httplib.h"
int main()
{
httplib::Client cli("es-cn-xxxx.elasticsearch.aliyuncs.com", 9200);
cli.set_basic_auth("xxx", "xxx");
httplib::Headers headers = {
{"Accept-Encoding", "gzip"}
}; // [notice: Better set it, otherwise it's download slow]
auto res = cli.Post("url", headers, "post", "application/json");
}