• Ubuntu18.04.2 amd64编译安装libcurl支持https


    1.准备工作,安装ssl库:

    sudo apt-get install openssl
    sudo apt-get install libssl-dev

    2.下载libcurl源代码:

    wget https://curl.haxx.se/download/curl-7.65.3.tar.xz

    3.解压并进入源代码目录:

    tar xf curl-7.65.3.tar.xz
    cd curl-7.65.3

    4.配置编译选项:

    ./configure --prefix=/usr                           
                --disable-static                        
                --enable-threaded-resolver              
                --with-ca-path=/etc/ssl/certs
    

    5.编译:

    make
    

    6.安装(需要root权限):

    make install &&
    
    rm -rf docs/examples/.deps &&
    
    find docs ( -name Makefile* -o -name *.1 -o -name *.3 ) -exec rm {} ; &&
    
    install -v -d -m755 /usr/share/doc/curl-7.65.3 &&
    cp -v -R docs/*     /usr/share/doc/curl-7.65.3

    至此,编译安装完成。

    写代码测试一下:

    #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, "https://www.baidu.com/");
     
        /* Perform the request, res will get the return code */
        res = curl_easy_perform(curl);
        /* Check for errors */
        if(res != CURLE_OK)
          fprintf(stderr, "curl_easy_perform() failed: %s
    ",
                  curl_easy_strerror(res));
     
        /* always cleanup */
        curl_easy_cleanup(curl);
      }
     
      curl_global_cleanup();
     
      return 0;
    }

    编译:

    gcc hello_https.c -l curl -o hello_https

    运行:

    ./hello_https

    运行结果截图:

     附 自定义回调处理响应数据代码:

    #include <stdio.h>
    #include <curl/curl.h>
    
    static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
    {
        if(stream == NULL) 
        return 0;
        printf("%s", ptr);
        return size * nmemb;
    }
    
    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, "https://www.baidu.com/");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
     
        /* Perform the request, res will get the return code */
        res = curl_easy_perform(curl);
        /* Check for errors */
        if(res != CURLE_OK)
          fprintf(stderr, "curl_easy_perform() failed: %s
    ",
                  curl_easy_strerror(res));
     
        /* always cleanup */
        curl_easy_cleanup(curl);
      }
     
      curl_global_cleanup();
     
      return 0;
    }
    View Code
  • 相关阅读:
    Android 通过solid来定义不同边框的颜色,可以只定义一个边框的颜色
    Java里的简单替换
    ActionBar
    char、short、int、float、double对应字节
    Java和JDK版本的关系-(转载)
    JFlash ARM对stm32程序的读取和烧录-(转载)
    STM32的时钟系统RCC详细整理(转载)
    STM32F7系列时钟相关问题:HSE模式配置(旁路模式、非旁路模式
    git OpenSSL SSL_connect问题
    keil使用VScode外部编辑器
  • 原文地址:https://www.cnblogs.com/areful/p/11306651.html
Copyright © 2020-2023  润新知