• [From HTTP to AWS][4]使用LibcURL with OpenSSL support


    其实LibcURL有不少语言的Binding,我比较喜欢C++,但鉴于CURLPP太麻烦,所以就直接C语言版LibcURL。

    >> Build OpenSSL

    www.openssl.org下载OpenSSL并安装perl环境

    1> perl Configure VC-WIN32 --prefix=c:/some/openssl/dir

    2> ms\do_ms
    3> nmake -f ms\nt.mak (for static library)

    or

    3> nmake -f ms\ntdll.mak (for DLL)

    >> Build LibcURL

    http://curl.haxx.se下载LibcURL, 打开vc6curl.dsw编译。

    注意Preprocessor中有没有:USE_SSLEAY和USE_OPENSSL

    >> Certification

    http://curl.haxx.se/docs/sslcerts.html


    LibCURL提供了一个mk-ca-bundle.pl,从Mozilla下载一个certdata.txt再倒腾一把,可以生成想要的*.crt文件。
    'http://mxr.mozilla.org/seamonkey/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1'
    运行perl script利用OpenSSL生成ca-bundle.crt,然后配置CURLOPT_CAINFO就可以大功告成:


    // Run this script to generate ca-bundle.crt
    S:\Components\CPlusPlus\cURL\curl-7.20.0\lib\mk-ca-bundle.pl

    如果配置不成功,在访问HTTPS的时候会报错CURLE_SSL_CACERT。

    
    

    >> 初试LibcURL

    最简单的例子, 在这个例子内,将"http://curl.haxx.se/docs/thanks.html"页面内容取回并写到本地文件内。
    尽管比起Python的UrlLib麻烦些,还是不错的。
    对于Easy Interface,基本的步骤如下:
    初始化LibCurl
    初始化Easy Interface
    设置所需的Option
    执行请求
    清理Easy Interface
    清理LibCurl


    Code:
    // --------------------------------------------------------------------------------------------------------
    // Initialize libcurl
    //
    CURLcode return_code;
    return_code = curl_global_init(CURL_GLOBAL_WIN32);
    if (CURLE_OK != return_code) return ;
    // Get easy handle
    //
    CURL *easy_handle = curl_easy_init();
    if (NULL == easy_handle)
    {
    curl_global_cleanup();
    return ;
    }
    // Open a local file
    //
    FILE *fp = fopen("c:\\thanks.html", "ab+"); 
    // Set easy handle properties
    //
    curl_easy_setopt(easy_handle, CURLOPT_URL, "http://curl.haxx.se/docs/thanks.html");
    curl_easy_setopt(easy_handle, CURLOPT_WRITEFUNCTION, &process_data);
    curl_easy_setopt(easy_handle, CURLOPT_WRITEDATA, fp);
    // Perform Request
    //
    curl_easy_perform(easy_handle);   
    // Close File
    //
    fclose(fp);
    // clean up curl
    //
    curl_easy_cleanup(easy_handle);
    curl_global_cleanup();
    // --------------------------------------------------------------------------------------------------------

  • 相关阅读:
    10. 王道考研-树与二叉树
    Shell基础论证实例
    关系型数据库与非关系型数据库区别
    中高级测试工程师面试题
    idea中cucumber环境搭建
    Java开发中对Redis的基本操作总结
    TestNG 单元测试框架(针对于testNG.xml配置)
    jmeter(四十五)常用Beanshell脚本
    Jmeter(二十一)_脚本两种参数化
    Jmeter(十五)_上传与下载
  • 原文地址:https://www.cnblogs.com/piaoger/p/2011052.html
Copyright © 2020-2023  润新知