捣腾cURL

 

简介:
cURL
是什么?简单的说,它就是利用URL语法在命令行方式下工作的文件传输工具。它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。cURL同样支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证, HTTP上传, 代理服务器, cookies, 用户名/密码认证, 下载文件断点续传, 上载文件断点续传, http代理服务器管道(proxy tunneling), 甚至它还支持IPv6, socks5代理服务器, 通过http代理服务器上传文件到FTP服务器等等。
功能十分强大。牛吧?哦,它是免费的开源的软件,可在各种操作系统下编译和运行。当然,除了使用curl命令行工具,你还可以使用libcurl,在自己的程序内实现相应的功能。
OpenSSL是一个基于密码学的安全开发包,提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议(如生成RSA密钥对、生成证书请求,以及小型CA等等),并提供了丰富的应用程序供测试或其它目的使用。
zlib是提供数据压缩用的函式库。

在VC6.0的编译环境中捣腾cURL:
先安装openssl?百度,找到一个简明的参考:http://zhidao.baidu.com/question/148385440.html
俺是这么做的:
1.
 
安装PerlActivePerl-5.8.0.806-MSWin32-x861.msi--这个似乎没啥特殊要求,随便按默认安装便可。
2. 编译OpenSSL:(Windows/VC下编译成DLL
a) 下载openssl打开官网,版本太多了...俺选择的版本0.9.8h,因为俺看到网上的文章,它能匹配VC6.0。
b) 把OpenSSL解压缩在预定安装的位置随便--俺放到了:G:\.
c) cd G:\openssl-0.9.8h
d) perl Configure VC-WIN32
e) ms\do_ms.bat (有些网页说:或者ms\do_masm.batms\do_nasm.bat)
f) nmake -f ms\ntdll.mak
这时候,时间稍微有点长,黑色的命令窗口不断涌现一大推命令...
俺用的是win7,曾两次弹出与VC6.0相关的不兼容窗口,确认。

结果是成功了,查看在
out32dll目录下,果然生成
libeay32.dll, libeay32.lib, ssleay32.dll, ssleay32.lib。

按照某些说法,好像还差一步,以后再补(注:这一步改变环境变量,不能省。):
VCStudioVC98VC6,在.Net下是VC7)目录,运行:vcvars32.bat

如何编译Libcurl?
a) 下载curl源代码,当前版本是curl-7.21.7
b) 解压,俺也放到了:G:\.
c) 添加环境变量:OPENSSL_PATH=G:\openssl-0.9.8h
d)curl目录下,运行nmake vc-ssl-dll
此时,出现错误:缺乏February 2003 Platform SDK。网上查找,得知他也叫Windows Server 2003 PSDK,是最后一个支持VC6.0的SDK。可是,现在microsoft网站,也找不到下载的。网络搜索,只找到这个:
http://wenwen.soso.com/z/q265788570.htm
按照文中提到的方法,解压后运行setup.exe,不成功,弹出网页:Welcome to the SDK Update Site
原因估计是俺用的win7系统认为该SDK太低档了...(俺的WIN7每次运行VC6.0,都会弹出不兼容的提示窗口,但还是能正常使用。)
还好,发现一个setup的文件夹,打开后,其中里面有许多x86的安装文件,把他们都运行一遍(事后觉得:其实可能不需要全部运行),大功告成了。
回到d)重做一遍,黑色的命令窗口不断涌现一大推命令...

成功了:在
.\lib下生成了libcurl.lib,还多了一个文件夹,名为release-ssl-dll。
据说:如果不需要zlib ssl功能,直接编译curl-7.21.3自带的vc6工程即可。

e) 按照某些说法,要得到libcurl.dll,可以运行.\lib\curllib.dsw,这是一个Visual Studio 6.0的工程,编译成功后可在.\lib\Debug下生成libcurl.dll
可是俺没找到,找到一个libcurl.vcproj显然不是for VC6.0的。(后来下载了一个curl-7.18.1的版本,里面确实有curllib.dsw文件...)
文件夹倒有另一个文件vc6libcurl.dsw,其作用却是在新文件夹.\lib\LIB-Release中生成一个libcurl.lib,其文件比上一个libcurl.lib小...
编译时通不过,提示:MSVC 6.0 requires "February 2003 Platform SDK"。
解决方法: 打开February 2003 Platform SDK,选择Register PSDK Directories with Visual Studio后。
重新编译,通过。

网上还介绍了一种编译方法:
因为涉及到zlib,所以先下载当前的版本,解压到G:\zlib-1.2.5。
A)编译Debug版本。
第一次尝试(不含zlib):
在curl-7.21.3/lib目录下,新建一个批处理bat文件,如BuildDebug.bat,内容如下:
call "D:\Microsoft Visual Studio\VC98\Bin\vcvars32.bat"
set CFG=debug-dll-ssl-dll
nmake -f Makefile.vc6
希望的结果,是输出:libcurld_imp.lib, libcurld.dll
结果是不成功!提示:MSVC 6.0 requires "February 2003 Platform SDK"。

解决方法: 需要对该目录下面的Makefile.vc6 进行如下修改:
找到:CFLAGS = /I. /I../include /nologo /W3 /GX /DWIN32 /YX /FD /c /DBUILDING_LIBCURL /...
改为:CFLAGS = /I. /I../include /nologo /W3 /GX /DWIN32 /YX /FD /c /DBUILDING_LIBCURL /I "C:\Program Files\Microsoft SDK\include"
再试,成功了。

第二次尝试(含zlib):
在curl-7.21.3/lib目录下,新建一个批处理bat文件,如BuildDebug.bat,内容如下:
call "D:\Microsoft Visual Studio\VC98\Bin\vcvars32.bat"
set CFG=debug-dll-ssl-dll-zlib-dll
set OPENSSL_PATH=G:\openssl-0.9.8h
set ZLIB_PATH=G:\zlib-1.2.5
nmake -f Makefile.vc6
运行,出现错误 LINK : fatal error Link1104: cannot open file "zdll.lib"...

解决方法: 打开zlib-1.2.5/old/visualc6/zlib.dsw,选择DLL_Release编译,把编译生成的zlib-1.2.5/old/visualc6/Win32_DLL_Release/ zlib1.lib 复制到curl-7.21.3/lib目录下,重命名为zdll.lib 。
再试,成功了。

B)编译Release版本。
在curl-7.21.3/lib目录下,新建一个批处理文件BuildRelease.bat,内容如下:
call "D:\Microsoft Visual Studio\VC98\Bin\vcvars32.bat"
set CFG=release-dll-ssl-dll-zlib-dll
set OPENSSL_PATH=G:\openssl-0.9.8h
set ZLIB_PATH=G:\zlib-1.2.5
nmake -f Makefile.vc6
运行,成功。输出结果:libcurl_imp.lib, libcurl.dll

VC6.0编程环境设置
1)VC6.0菜单--〉工具--〉选项--〉目录,Include files添加"G:\CURL-7.21.7\INCLUDE",Libary files添加"G:\CURL-7.21.7\LIB"。
2)把4个DLL文件
libcurl.dll/libeay32.dll/ssleay32.dll/zlib1.dll,放到DEBUG目录,要不然编译的时候,VC老嚷嚷找不到相应的文件;
3)代码的最上方是必需的include文件,如下:
#include <curl/curl.h>
#pragma comment(lib, "libcurl_imp.lib")

添加一个函数:
size_t process_data(void *buffer, size_t size, size_t nmemb, void *user_p)
{
 FILE *fp = (FILE *)user_p;
 size_t return_size = fwrite(buffer, size, nmemb, fp);
 //cout << (char *)buffer << endl;
 return return_size;
}

 读取网页的代码:
......
     // 初始化libcurl
     CURLcode return_code;
     return_code = curl_global_init(CURL_GLOBAL_WIN32);
     if (CURLE_OK != return_code) return -1;
     // 获取easy handle
     CURL *easy_handle = curl_easy_init();
     if (NULL == easy_handle)
     {
      curl_global_cleanup();
      return -1;
     }
     FILE *fp = fopen("D:\\SparkHo\\data.html","ab+"); //
     // 设置easy handle属性
     curl_easy_setopt(easy_handle, CURLOPT_URL, "http://hi.baidu.com/sparkho");
     curl_easy_setopt(easy_handle, CURLOPT_WRITEFUNCTION, &process_data);
     curl_easy_setopt(easy_handle, CURLOPT_WRITEDATA, fp).;

     // 执行数据请求
     curl_easy_perform(easy_handle); 
     // 释放资源
     fclose(fp);
     curl_easy_cleanup(easy_handle);
     curl_global_cleanup();
     return 0;
......

上述代码在VC6.0上编译通过,其结果就是读取网页,到文件data.html。 

 

http://hi.baidu.com/sparkho/blog/item/2d15703fb56787e0838b135f.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值