windows平台中使用curl实现Http请求

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  
#include  
#include  
 
#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 有详细的例子代码




你可能感兴趣的:(C/C++,技术)