小记 libcurl下载
来源:互联网 发布:章子怡 宫二 知乎 编辑:程序博客网 时间:2024/06/18 00:14
#include "stdafx.h"
#include "../../curl/curl.h"
#pragma comment(lib, "curllib.lib")
struct MemoryStruct
{
char *memory;
size_t size;
};
//添加一个全局变量
struct MemoryStruct chunk;
static void *myrealloc(void *ptr, size_t size)
{
/* There might be a realloc() out there that doesn't like reallocing
NULL pointers, so we take care of it here */
if(ptr)
return realloc(ptr, size);
else
return malloc(size);
}
static size_t
WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data)
{
size_t realsize = size * nmemb;
//我们给定了一个足够大的内存,不需要重新申请
struct MemoryStruct *mem = (struct MemoryStruct *)data;
mem->memory = (char *)myrealloc(mem->memory, mem->size + realsize + 1);
if (mem->memory) {
memcpy(&(mem->memory[mem->size]), ptr, realsize);
mem->size += realsize;
mem->memory[mem->size] = 0;
}
return realsize;
}
int getFileInBuffer()
{
CURL *curl_handle;
chunk.memory=NULL; /* we expect realloc(NULL, size) to work */
chunk.size = 0; /* no data at this point */
curl_global_init(CURL_GLOBAL_ALL);
/* init the curl session */
curl_handle = curl_easy_init();
/* specify URL to get */
curl_easy_setopt(curl_handle, CURLOPT_URL, "http://img1.gtimg.com/sports/pics/hv1/117/247/625/40703727.jpg");
/* send all data to this function */
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
/* we pass our 'chunk' struct to the callback function */
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
/* some servers don't like requests that are made without a user-agent
field, so we provide one */
curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");
/* get it! */
curl_easy_perform(curl_handle);
/* cleanup curl stuff */
curl_easy_cleanup(curl_handle);
/*
* Now, our chunk.memory points to a memory block that is chunk.size
* bytes big and contains the remote file.
*
* Do something nice with it!
*
* You should be aware of the fact that at this point we might have an
* allocated data block, and nothing has yet deallocated that data. So when
* you're done with it, you should free() it as a nice application.
*/
if(chunk.memory)
{
{
FILE* file = fopen("e://downfile", "w+b");
if (file)
{
fwrite(chunk.memory, chunk.size, 1, file);
fflush(file);
fclose(file);
}
}
free(chunk.memory);
}
/* we're done with libcurl, so clean it up */
curl_global_cleanup();
return chunk.size;
}
int _tmain(int argc, _TCHAR* argv[])
{
getFileInBuffer();
return 0;
}
- 小记 libcurl下载
- libcurl ftp下载实例
- linux 下 libcurl 下载
- libcurl ftp下载实例
- libcurl下载文件
- Libcurl实现文件下载
- libcurl 各种版本下载网址
- libcurl下载限速编程调研
- libcurl实现多线程下载器
- libcurl下载文件简易demo
- Libcurl 从FTP服务器下载
- 使用libCurl实现断点下载
- 使用libcurl来下载文件
- 将libcurl封装下载类
- 使用libcurl显示下载进度
- libcurl应用 libcurl应用:如何把下载内容写入内存
- [libcurl]_[初级]_[使用libcurl下载大文件]
- libcurl库的使用(通过libcurl库下载url图像)
- 细说Java GUI:AWT,SWT,Swing
- 慎用""
- 当时只是玩玩而已
- 在NetBeans中使用MySQL创建简单Web应用程序
- Tomcat 系统架构与设计模式,第 1 部分: 工作原理
- 小记 libcurl下载
- 你就会离成功
- 基于 Apache Mahout 构建社会化推荐引擎
- linux 文件系统目录分类
- UI Design In NetBeans 6.0
- 数据库设计中的一些技巧
- 0.0
- Vb VC++ 调用C++编写的dll库
- Eclipse使用StrutsIDE开发struts