[From HTTP to AWS][4]使用LibcURL with OpenSSL support
2011-04-10 01:20
288 查看
其实LibcURL有不少语言的Binding,我比较喜欢C++,但鉴于CURLPP太麻烦,所以就直接C语言版LibcURL。
>> Build OpenSSL
从www.openssl.org下载OpenSSL并安装perl环境
or
>> Build LibcURL
从http://curl.haxx.se下载LibcURL, 打开vc6curl.dsw编译。
注意Preprocessor中有没有:USE_SSLEAY和USE_OPENSSL
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();
// --------------------------------------------------------------------------------------------------------
>> 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();
// --------------------------------------------------------------------------------------------------------
相关文章推荐
- libcurl link-time ssl backend (nss) is different from compile-time ssl backend (openssl)
- windows下libcurl+openssl编译与使用配置
- git cloning fails with libcurl was built with SSL disabled
- linux C libcurl https 使用
- [From HTTP to AWS][1]HTTP & HTTPS
- Android Design Support Library 中控件的使用简单介绍(一)介绍 在这个 Lib 中主要包含了 8 个新的 material design 组件!最低支持 Android
- python--httplib模块使用
- protocol http not supported or disabled in libcurl apt-get
- curl with ssl support for win32
- 使用curl创建HTTP请求 Using curl To Make HTTP Requests--用Enki学Linux系列(3)
- http 使用curl发起https请求
- pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (none/other)
- 使用ASIHTTPRequest 编译提示找不到"libxml/HTMLparser.h"的解决方法
- 使用curl实现http传输,Url编解码问题
- Android 百分比布局(percent-support-lib)的使用及源码详解
- python--httplib模块使用
- 使用GetDIBts/SetDIBits高速逐点处理 from http://blog.sina.com.cn/s/blog_552ad2090100e3eu.html
- http://www.oschina.net/translate/oauth-support-for-nginx-with-lua
- Python httplib,smtplib使用方法
- MFC中使用ADO进行数据库操作 参考FROM:http://hi.baidu.com/sunkanghome/item/e1fda510b3186359f1090ee2 数据库与数据库编程: 当