zoukankan      html  css  js  c++  java
  • [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();
    // --------------------------------------------------------------------------------------------------------

  • 相关阅读:
    ElasticSearch常见经典面试题
    系统剖析Android中的内存泄漏
    Android Studio在导入eclipse的项目时一直卡在gradle:Configure project
    记录Android Studio项目提交到github上的出错处理
    如何将Android Studio项目提交(更新)到github
    MOB 短信验证
    mob免费短信验证码安卓SDK调用方法
    Git的安装与使用
    svn代码提交注意事项
    Fragment详解之三——管理Fragment(1)
  • 原文地址:https://www.cnblogs.com/piaoger/p/2011052.html
Copyright © 2011-2022 走看看