您的位置:首页 > 理论基础 > 计算机网络

[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环境

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

// --------------------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: