这些天用vc++写了点http post和get的东西玩玩,碰到些问题顺便记录下来
c#里提供了很方便的HttpWebRequest类但vc++就没这么幸运了,本以为很简单就随手写一个类试试
这期间遇到的问题还是很多,比如utf8编码,gzip压缩,http redirect
压缩编码问题还是有很多人遇到了,虽然花了些时间不过还是解决了,但是http redirect一直没搞定
本来想看看libcurl的代码,无奈一点都不熟悉看的毫无头绪,于是就想着先熟悉基本用法再去研究代码了
顺便说下:现在网上抄的东西太多,很多人随便拖点东西到自己的blog也不验证一下就放出来了,本来很简单的事情弄的不那么顺利
说说我自己怎么用libcurl吧
这个是我编译libcurl的时候参考的
http://linxh.blog.ccidnet.com/blog-htm-do-showone-uid-39995-type-blog-itemid-152022.html
这个是官方文档:
http://curl.haxx.se/libcurl/c/
1、下载libcurl的源代码
下载地址:http://curl.haxx.se/download.html
进去后最上面的几个链接就是了,这些只是压缩方式不同,随便下一个能解压的就行(不会的就选第三个windows自己就能解压)
(注意:libcurl和curl 的区别,一个是curl库,而另一个是工具)
下载后解压到 C:/curl
2、如果以后要用到gzip的话就需要下载zlib
http://www.zlib.net/zlib123-dll.zip
把下载好的文件解压到 C:/zlib
3、编译
我要访问的网页可以用gzip压缩,为了加快访问速度我就加了gzip模块
ssl我没用到,所以编译的时候去掉了
(详细的见我上面提到的编译参考的blog)
这里要提醒下:如果你用debug方式运行你的程序,记得用debug编译的库;同理你release版本程序用release版本的库
4、使用libcurl:
(1)将 C:/curl/include/ 下的 crul目录复制到你的工程目录下(和你工程里的其他.cpp文件放一个目录)
(2)在用到libcurl的cpp文件里加入:
#include "curl/curl.h"
#pragma comment(lib,"libcurld_imp.lib")
然后就可以正常使用了
还有一个需要提醒的就是write_callback的调用方式
我把write_callback作为类成员时总是出错,后来查了是c的调用方式不一样
我目前把write_callback作为全局函数就没问题了,应该可以指定调用方式解决的
今天先写到这儿,下次有空再继续给个列子
编译Debug版本。
set CFG=debug-dll-zlib-dll
set ZLIB_PATH=C:/zlib/include
nmake -f Makefile.vc8
其输出:libcurld_imp.lib, libcurld.dll
编译Release版本。
其输出:libcurl_imp.lib, libcurl.dll
set CFG=release-dll-zlib-dll
set ZLIB_PATH=C:/zlib/include
nmake -f Makefile.vc8