C语言 访问 URL 的实现。
Linux libcurl安装及注意事项:Linux libcurl安装及注意事项 - 蘭亭客 - 博客园
(安装 libcurl 源码库 )
libcurl 使用说明和网页抓取 linux下的curl编程:libcurl 使用说明和网页抓取 linux下的curl编程_ultrapp的专栏-CSDN博客
curl 库 使用实例
1. 下载最新源码 编译成 libcurl.so
2. 包含所有头文件
3. 使用实例 有点东西 有内涵
static size_t write_data(char *buf, size_t size, size_t nmemb, void *userdata)
{
static size_t file_total_size = 0;
size_t file_total = 0;
CurlInfo* curl_info = (CurlInfo *)userdata;
if (curl_info->language_id == CN) {
file_total = CN_SIZE;
} else if (curl_info->language_id == EN) {
file_total = EN_SIZE;
}
size_t realSize = size * nmemb;
size_t file_return_size = write(curl_info->fd, buf, realSize);
if (file_return_size <= 0 ) {
return -1;
}
file_total_size += file_return_size;
// pr_dbg("file_total_size:: %ld\n", file_total_size);
VoiceDataStatus_t voice_data_status;
voice_data_status.language_id = curl_info->language_id;
voice_data_status.schedu = 0x64 * file_total_size / file_total;
voice_data_status.status = 0x1;
if (voice_data_status.schedu % 10 == 0) {
curl_info->cloud_server->SendTaskVoiceDataStatus(&voice_data_status);
}
return file_return_size;
}
void BrainHub::GetHttpRequest(const char* file_name, const char* url, CurlInfo* curl_info)
{
if (file_name == NULL || url == NULL) {
pr_err("file_name or url is null.\n");
return;
}
int fd = open(file_name, O_RDWR|O_CREAT, 0644);
if (fd == -1) {
pr_err("file fd is null.\n");
return;
}
curl_info->fd = fd;
CURLcode ret = curl_global_init(CURL_GLOBAL_ALL);
if (CURLE_OK != ret) {
pr_err("curl_global_init failed.\n");
return;
}
CURL *handle = curl_easy_init();
if (handle == NULL) {
pr_err("curl_easy_init failed.\n");
return;
}
curl_easy_setopt(handle, CURLOPT_URL, url);
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(handle, CURLOPT_WRITEDATA, (void *)curl_info);
curl_easy_perform(handle);
curl_global_cleanup();
close(fd);
}