1: 下载官方库 地址:http://curl.haxx.se/download.html 搜索 Win32 - MSVC,下面有两个版本的库,一个是带ssl的,一个是不带ssl的。我把两个都下载了下来:
不带ssl的:http://curl.haxx.se/download/libcurl-7.18.0-win32-msvc.zip
带ssl的:http://curl.haxx.se/download/libcurl-7.19.3-win32-ssl-msvc.zip
2: 解压缩
把下载后的两个zip包分别加压缩,我这里保存到E:\source目录下面,两个目录分别是:
E:\source\libcurl-7.18.0-win32-msvc
E:\source\libcurl-7.19.3-win32-ssl-msvc
目录下以及包括源代码,VC的工程文件和编译好的dll、lib文件。 可以直接使用dll无需编译。
3: Visual studio 环境设置
不带ssl的:工具-》选项-》项目-》VC++目录-》
平台默认是win32,选择显示以下文件的目录-》包含文件,添加新行:
路径选择为刚才解压缩的目录E:\source\libcurl-7.18.0-win32-msvc\目录下的include目录,全路径为:
E:\source\libcurl-7.18.0-win32-msvc\include
再选择库文件,添加新行:
路径设置为libcurl的存放目录,我这里设置为E:\source\libcurl-7.18.0-win32-msvc。
如果使用ssl的包的话,那只需要替换为路径E:\source\libcurl-7.19.3-win32-ssl-msvc即可
4 新建win32项目.默认设置即可。
将curl的安装目录下,libcurl.lib增加到工程的Additional Dependencies中。
5: 源代码
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>
#define MAX_BUF 65536
char wr_buf[MAX_BUF+1];
int wr_index;
/*
* Write data callback function (called within the context of
* curl_easy_perform.
*/
size_t write_data( void *buffer, size_t size, size_t nmemb, void *userp )
{
int segsize = size * nmemb;
/* Check to see if this data exceeds the size of our buffer. If so,
* set the user-defined context value and return 0 to indicate a
* problem to curl.
*/
if ( wr_index + segsize > MAX_BUF ) {
*(int *)userp = 1;
return 0;
}
/* Copy the data from the curl buffer into our buffer */
memcpy( (void *)&wr_buf[wr_index], buffer, (size_t)segsize );
/* Update the write index */
wr_index += segsize;
/* Null terminate the buffer */
wr_buf[wr_index] = 0;
/* Return the number of bytes received, indicating to curl that all is okay */
return segsize;
}
/*
* Simple curl application to read the index.html file from a Web site.
*/
int main( void )
{
CURL *curl;
CURLcode ret;
int wr_error;
wr_error = 0;
wr_index = 0;
/* First step, init curl */
curl = curl_easy_init();
if (!curl) {
printf("couldn't init curl ");
return 0;
}
/* Tell curl the URL of the file we're going to retrieve */
curl_easy_setopt( curl, CURLOPT_URL, "www.baidu.com" );
/* Tell curl that we'll receive data to the function write_data, and
* also provide it with a context pointer for our error return.
*/
curl_easy_setopt( curl, CURLOPT_WRITEDATA, (void *)&wr_error );
curl_easy_setopt( curl, CURLOPT_WRITEFUNCTION, write_data );
/* Allow curl to perform the action */
ret = curl_easy_perform( curl );
printf( "ret = %d (write_error = %d) ", ret, wr_error );
/* Emit the page if curl indicates that no errors occurred */
if ( ret == 0 ) printf( "%s ", wr_buf );
curl_easy_cleanup( curl );
return 0;
}
6:其他
- 运行时如果需要其他的库的支持(例如zlib等)在http://curl.haxx.se/download.html也可以找到,而且也有编译好的dll
- 网上有一篇《Using libcurl in Visual Studio》描述了下载、编译、环境设置项目的步骤
- http://curl.haxx.se/libcurl/c/example.html 有详细的例子代码