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();
    // --------------------------------------------------------------------------------------------------------

  • 相关阅读:
    实现一个电话号码生成器
    SQL查询--关于查询的练习题
    SQL查询--内连接、外连接、自连接查询
    SQL查询--约束
    SQL查询--索引
    SQL查询--简单了解SQL(结构化查询语言)
    使用python做一个爬虫GUI程序
    postman(十二):发送携带md5签名、随机数等参数的请求
    对比3种接口测试的工具:jmeter+ant;postman;python的requests+unittest或requests+excel
    (四十八)c#Winform自定义控件-下拉按钮-HZHControls
  • 原文地址:https://www.cnblogs.com/piaoger/p/2011052.html
Copyright © 2011-2022 走看看