使用libcurl库获取网页源码

libcurl真是个好东西,不过我以前C/C++学得太不扎实,以致想写个返回字符串的函数都为难。由于不同网页的大小不一,有可能有的网页只有十来K,有的网页却有200多K,如果分配一个200多K的静态变量,这样又太不划算了,何况还没测试频繁分配这样大的静态变量会有什么后遗症,所以只好将下载的网页源码保存到文件了。

下面是一个最简单的用libcurl库获取网页源码并保存到文件的实例:

#include <io.h> #include "curl/curl.h" #pragma comment(lib, "ws2_32.lib") #pragma comment ( lib, "libcurl.lib" ) #pragma comment ( lib, "ws2_32.lib" ) #pragma comment ( lib, "winmm.lib" ) #pragma comment ( lib, "wldap32.lib" ) //这是libcurl接收数据的回调函数,相当于recv的死循环 //其中stream可以自定义数据类型,这里我传入的是文件保存路径 static size_t write_callback( void *ptr, size_t size, size_t nmemb, void *stream ) { int len = size * nmemb; int written = len; FILE *fp = NULL; if ( access( (char*)stream, 0 ) == -1 ) { fp = fopen( (char*) stream, "wb" ); } else { fp = fopen( (char*) stream, "ab" ); } if (fp) { fwrite( ptr, size, nmemb, fp ); } return written; } int GetUrl( const char *url, char *savepath ) { CURL *curl; CURLcode res; struct curl_slist *chunk = NULL; curl = curl_easy_init(); if ( curl ) { curl_easy_setopt( curl, CURLOPT_VERBOSE, 0L ); curl_easy_setopt( curl, CURLOPT_URL, url ); //指定回调函数 curl_easy_setopt( curl, CURLOPT_WRITEFUNCTION, write_callback); //这个变量可作为接收或传递数据的作用 curl_easy_setopt( curl, CURLOPT_WRITEDATA, savepath ); res = curl_easy_perform( curl ); if (res == CURLE_OK) { return 1; } return 0; } } int main( void ) { if ( GetUrl( "t.sina.com.cn", "c:/1.txt" ) ) { printf( "OK" ); } return 0; }

转载于:https://www.cnblogs.com/pcdelphi/archive/2011/04/12/2017946.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值