libcurl下载文件

简介: 一、初始化 CURL *pHandler = curl_easy_init();   二、设置请求参数; 调用curl_easy_setopt方法,设置选项 curl_easy_setopt(pHandler , CURLOPT_WRITEFUNCTION, WriteData); cu...

一、初始化

CURL *pHandler = curl_easy_init();

 

二、设置请求参数;

调用curl_easy_setopt方法,设置选项

curl_easy_setopt(pHandler , CURLOPT_WRITEFUNCTION, WriteData);

curl_easy_setopt(pHandler , CURLOPT_WRITEDATA, pFile);

 

//设置请求的url地址

curl_easy_setopt(pHandler , CURLOPT_URL, strUrl.c_str());

//如果为post请求,这里设置提交的参数

//curl_easy_setopt(pHandler , CURLOPT_POSTFIELDS, strPostData.c_str());

curl_easy_setopt(pHandler , CURLOPT_FAILONERROR, true);
curl_easy_setopt(pHandler , CURLOPT_TIMEOUT, 60);  //超时时间(秒)
curl_easy_setopt(pHandler , CURLOPT_NOSIGNAL, true);

 

三、执行下载

CURLcode codeRet = curl_easy_perform(pHandler);

 

四、获取返回的http状态码

long retcode = 0;

curl_easy_getinfo(pHandler, CURLINFO_RESPONSE_CODE , &retcode);

 

五、清理

curl_easy_cleanup(pHandler);

 

if (codeRet == CURLE_OK && (retcode == 200 || retcode == 304 || retcode == 204))

{

//下载成功

}

else

{

//下载失败

}

 

size_t WriteData(const char *ptr, size_t size, size_t nmemb, FILE *stream)
{
    if (!ptr || !stream)
    {
        return 0;
    }


    return fwrite(ptr, size, nmemb, stream);
}

 

关于文件的读写操作,可以参考这里:

fopen

fseek

ftell

fread

fwrite

目录
相关文章
|
11月前
|
Linux
linux命令之上传文件和下载文件-lrzsz
linux命令之上传文件和下载文件-lrzsz
|
JavaScript 数据格式 XML
libcurl上传文件
libcurl参数很多,一不小心就容易遇到问题。曾经就遇到过一个很蛋疼的问题:libcurl断点下载>>   这里主要汇总一下,libcurl上传的二种方式: 1、直接上传文件,类似form表单,>   直接上传文件: struct curl_httppost *fo...
1417 0
|
C++
使用libcurl进行文件上传
上篇博文讲到了如何使用multicurl来进行http并发访问,今天继续有关curl的主题,来八一八如何使用curl来上传文件,在介绍具体方法之前了解下目前http文件上传的基本实现。     rfc1867描述了如何使用http协议来上传客户端文件,目前基本上所有的浏览器和web服务器都支持ht...
1439 0
|
测试技术 C++ Windows
Windows下VS2015编译并使用libcurl.lib静态库(curl:http客户端库c++版本)
Windows下VS2015编译并使用libcurl.lib静态库(curl:http客户端库c++版本)
1027 0
|
Web App开发 网络安全