linux c语言libcurl,libcurl库的使用(通过libcurl库下载url图像)

libcurl库的使用(通过libcurl库下载url图像)

1. 从这里下载libcurl源码,解压缩;

2. 通过CMake(cmake-gui)生成vs2013 x64位 CURL.sln;

3. 打开CURL.sln,编译会生成libcurl.dll动态库;

4. 在CURL.sln基础上,添加一个testlibcurl控制台工程;

5. testlibcurl.cpp:

#include "stdafx.h"

#include

#include

size_t callbackfunction(void *ptr, size_t size, size_t nmemb, void* userdata)

{

FILE* stream = (FILE*)userdata;

if (!stream) {

printf("!!! No stream\n");

return 0;

}

size_t written = fwrite((FILE*)ptr, size, nmemb, stream);

return written;

}

bool download_jpeg(char* url)

{

FILE* fp = fopen("out.jpg", "wb");

if (!fp) {

printf("!!! Failed to create file on the disk\n");

return false;

}

CURL* curlCtx = curl_easy_init();

curl_easy_setopt(curlCtx, CURLOPT_URL, url);

curl_easy_setopt(curlCtx, CURLOPT_WRITEDATA, fp);

curl_easy_setopt(curlCtx, CURLOPT_WRITEFUNCTION, callbackfunction);

curl_easy_setopt(curlCtx, CURLOPT_FOLLOWLOCATION, 1);

CURLcode rc = curl_easy_perform(curlCtx);

if (rc) {

printf("!!! Failed to download: %s\n", url);

return false;

}

long res_code = 0;

curl_easy_getinfo(curlCtx, CURLINFO_RESPONSE_CODE, &res_code);

if (!((res_code == 200 || res_code == 201) && rc != CURLE_ABORTED_BY_CALLBACK)) {

printf("!!! Response code: %d\n", res_code);

return false;

}

curl_easy_cleanup(curlCtx);

fclose(fp);

return true;

}

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream)

{

size_t written = fwrite(ptr, size, nmemb, stream);

return written;

}

bool download_jpeg2(char* url)

{

CURL *curl;

FILE *fp;

CURLcode res;

char* outfilename = "out2.jpg";

curl = curl_easy_init();

if (curl) {

fp = fopen(outfilename, "wb");

curl_easy_setopt(curl, CURLOPT_URL, url);

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);

curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);

res = curl_easy_perform(curl);

/* always cleanup */

curl_easy_cleanup(curl);

fclose(fp);

}

else {

printf("!!!curl init failed\n");

return false;

}

return true;

}

int main(int argc, char* argv[])

{

char* url = "http://f.hiphotos.baidu.com/image/pic/item/d043ad4bd11373f0671f5d95a60f4bfbfbed0493.jpg";

#if 1

if (!download_jpeg(url)) {

printf("!! Failed to download file: %s\n", url);

return -1;

}

#else

if (!download_jpeg2(url)) {

printf("!! Failed to download file: %s\n", url);

return -1;

}

#endif

std::cout << "ok!" << std::endl;

return 0;

}

0b1331709591d260c1c78e86d0c51c18.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值