在vs2005中使用libcurl

本文分享了作者在VC++中使用libcurl进行HTTP请求的实际经验,包括如何配置环境、解决gzip压缩问题及应对HTTP重定向挑战等。此外,还详细介绍了libcurl的安装与编译过程。

这些天用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

版本使用了7.66 没有用最新的,测试的时候发现7.66以后的版本每次访问都会有1~3条本地(127.0.0.1)的连接和发送数据,不知道是什么问题 支持 HTTP/HTTPS/WebSocket/zlib (WebSocket 模拟出来的) 其他的协议都去掉了,SSL由openssl换成SSPI 文件小的很多 修改内容 增加 curl_slist_add 以替代 curl_slist_append curl_slist_append 接口在添加的时候没有检查重复和覆盖的功能 添加相同的头信息后发送的时候会有多条头信息 curl_slist_add  添加的时候会检查重复并覆盖,删除重复的头 添加 Curl_Perform 以替代 curl_easy_perform 可实现提交取返回一次性完成,不需要自己设置回调,处理数据 增加上传/下载进度的功能,可实现获取实时进度 CURL本来不支持 WebSocket 协议 使用了模拟的方法 实现了 WebSocket 协议 使用 CURLOPT_CONNECT_ONLY 连接服务器成功后 构造请求头发送后获取返回的数据,判断是否是 WebSocket 之后创建线程,循环获取服务器返回的数据, 发送和接收到的数据 使用 WebSocket 协议进行组包和拆包,得到实际的数据 访问的 URL,把 WS/WSS 替换成 HTTP/HTTPS 即可 没有做长连接测试,不知道是否支持 WebSocket 只做了简单是处理,可能有BUF,有能力的可以完善下 支持多线程,多线程循环访问没有出错 libcurl.rar (179 K) 下载次数:136 Vc 源码 curl-7.66.rar (3591 K) 下载次数:67 项目在 projects\Windows 文件夹里 我使用的是 Vc14(VS2015),Vc14-是原始未修改的 Vc10(VS2010,生成的文件更小),也是修改的,可以用,Vc10-是原始未修改的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值