好记性不如铅笔头

C && C++, 编程

libcurl最简单使用笔记

curl功能很强大,libcurl就更不用说了。这里笔记下如何最简单的跑通libcurl,复杂的应用场景还是直接查API或者啃源码。

CONTENTS

编译参数

程序使用libcurl就要在编译时链接上,那么编译参数如何写呢?参考【tutorial

输入命令curl-config –cflags 来看下cflags如何写:

ubuntu@ubuntu-xenial:~$  curl-config --cflags #本地环境没有安装
The program 'curl-config' can be found in the following packages:
 * libcurl4-gnutls-dev
 * libcurl4-nss-dev
 * libcurl4-openssl-dev
Try: sudo apt install <selected package>
ubuntu@ubuntu-xenial:~$ sudo apt-get install  libcurl4-openssl-dev #安装SSL版本
ubuntu@ubuntu-xenial:~$  curl-config --cflags #cflags 默认不需要设置

ubuntu@ubuntu-xenial:~$ curl-config --libs  #libs需要手动指定
-L/usr/lib/x86_64-linux-gnu -lcurl
ubuntu@ubuntu-xenial:~$ curl-config --feature  #支持SSL
SSL
。。。。
。。。。

最简单实例

HelloCstriker1407.c

#include <stdio.h>
#include <curl/curl.h>
 
int main(void)
{
  CURL *curl;
  CURLcode res;
 
  curl_global_init(CURL_GLOBAL_DEFAULT);
 
  curl = curl_easy_init();
  if(curl) 
  {
    curl_easy_setopt(curl, CURLOPT_URL, "http://116.62.110.235/blog/");
  
    res = curl_easy_perform(curl);
 
	curl_easy_cleanup(curl);
  }
 
  curl_global_cleanup();
  
  return 0;
}

build && run:

ubuntu@ubuntu-xenial:~/curl_proj$ 
ubuntu@ubuntu-xenial:~/curl_proj$ gcc HelloCstriker1407.c  -o HelloCstriker1407 -L/usr/lib/x86_64-linux-gnu -lcurl
ubuntu@ubuntu-xenial:~/curl_proj$ ./HelloCstriker1407
<!DOCTYPE html>
<!--[if IE 8]>
<html class="ie ie8" lang="zh-CN">
。。。。。。

这里可以看到,如果libcurl没有指定回调函数,默认会直接输出到控制台,即stdout。这里我们简单的注册一个回调函数。

使用回调函数

HelloCstriker1407.c

#include <stdio.h>
#include <string.h>
#include <curl/curl.h>


#define S_BUFFER_SIZE 20000
static char s_write_buffer[S_BUFFER_SIZE];

size_t s_buffer_write_callback(char *ptr, size_t size, size_t nmemb, void *userdata)
{
        int totalSize = size * nmemb;
        if(totalSize > S_BUFFER_SIZE)
        {
                totalSize = S_BUFFER_SIZE;
        }

        memcpy(userdata, ptr, totalSize);
        printf("Read %d Bytes:%s\n", totalSize, (char *)userdata);

        return totalSize;
}


int main(void)
{
        CURL *curl;
        CURLcode res;

        curl_global_init(CURL_GLOBAL_DEFAULT);

        curl = curl_easy_init();
        if(curl)
        {
                curl_easy_setopt(curl, CURLOPT_URL, "http://116.62.110.235/blog/");
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, s_write_buffer);
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, s_buffer_write_callback);

                printf("Begin To Get Website...\n");
                memset(s_write_buffer, 0, S_BUFFER_SIZE);
                curl_easy_perform(curl);
                printf("Get WebSite Finish...\n");

                curl_easy_cleanup(curl);
        }

        curl_global_cleanup();

        return 0;
}

 

发表评论

1 × 4 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据