#pragma once

#include <stdio.h>
#include <stdlib.h>

#include <curl/curl.h>

#ifdef    _DEBUG
#pragma comment(lib, "libcurld_imp.lib")
#else
#pragma comment(lib, "libcurl_imp.lib")
#endif

class CUrlInit
{
public:
    CUrlInit()
    {
        curl_global_init(CURL_GLOBAL_ALL);
    }
    
    ~CUrlInit()
    {
        curl_global_cleanup();
    }
    
protected:
    static CUrlInit m_Initialize;
};

CUrlInit CUrlInit::m_Initialize;

class CMyUrl
{
public:
    CMyUrl()
    {
        /* init the curl session */
        curl_handle = curl_easy_init();
    }

~CMyUrl()
    {
        /* cleanup curl stuff */
        curl_easy_cleanup(curl_handle);
    }

public:
    int get_file(const char* szUrl, const char* szFile)
    {
        curl_easy_reset(m_curl);
        
        /* set URL to get */
        curl_easy_setopt(curl_handle, CURLOPT_URL, szUrl);
        
        /* no progress meter please */
        curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1L);
        
        /* send all data to this function  */
        curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data);
        
        /* open the files */         
        FILE* bodyfile = fopen(szFile, "wb");
        if (bodyfile == NULL) {
            curl_easy_cleanup(curl_handle);
            return -1;
        }
        
        /* we want the body be written to this file handle instead of stdout */
        curl_easy_setopt(curl_handle,   CURLOPT_WRITEDATA, bodyfile);
        
        /* get it! */
        curl_easy_perform(curl_handle);        
        
        /* close the body file */
        fclose(bodyfile);

return 0;
    }

protected:
    static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
    {
        int written = fwrite(ptr, size, nmemb, (FILE *)stream);
        return written;
    }

protected:
    CURL *curl_handle;
};

c/c++常用代码--使用libcurl下载文件的更多相关文章

  1. 使用libcurl下载文件小例

    libcurl是一个很强大的开源网络处理库,支持包括HTTP.HTTPS.FTP……一系列网络协议.用它来进行HTTP的get\post 或者下载文件更是小菜一碟,chrome内核都用到了它,本文主要 ...

  2. libcurl下载文件

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

  3. [C#常用代码]如何把指定文件夹中的文件移动到指定的文件夹

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. libcurl下载文件简易demo

    size_t test_save(void *ptr, size_t size, size_t nmemb, void *stream) { size_t sizes = size * nmemb; ...

  5. js发送post请求下载文件

    大家都知道ajax是不能直接下载文件的,所以一般都是通过一个超链接的形式去下载一个文件 但是当牵扯到需要发送很多数据到服务器上再下载的时候超链接的形式就有些太过勉强了 如下是一个工具方法(依赖jque ...

  6. 浏览器兼容性--IE11以及Edge等下载文件的中文名出现乱码,前后端解决方案

    项目中有用到文件下载功能,之前在处理下载时对IE浏览器下文件下载名进行过处理,测试也没有问题,但是功能上线后,业务反馈IE11文件下载文件名依然乱码.打印User-Agent字符串如下: IE11 U ...

  7. [转] 使用 JavaScript 创建并下载文件

    [From] https://gaohaoyang.github.io/2016/11/22/js-create-file-and-download/ 本文将介绍如何使用 JavaScript 创建文 ...

  8. 两种js下载文件的方法(转)

    function DownURL(strRemoteURL, strLocalURL){ try{ var xmlHTTP = new ActiveXObject("Microsoft.XM ...

  9. Ext下载文件

    项目中前台用的是Ext JS,要从数据库中查询数据并导出为Excel表格 对此研究了下,代码如下: 前台代码: /** * 进行下载文件(form方式) */ _downloadDraft:funct ...

随机推荐

  1. 使用throws抛出异常

    声明抛出异常实在一个方法声明的throws子句中指明的.throws子句方法的基本形式如下.方法 throws 异常列表{ }throws子句中可以指明多个异常,说明该方法不对这些异常进行处理,而是抛 ...

  2. AceAdmin In MVC之控件

    AceAdmin有很多Html控件,而下载下来之后全部混杂在一起,想用一个控件有时得调整半天,干脆整理出一个版本,而且结合起来MVC的封装.以后就不用一个js css的调了. 在MVC中Html的控件 ...

  3. Hadoop的shell脚本分析

    你会发现hadoop-daemon.sh用于启动单独的本机节点 而hadoop-daemons.sh 会批量的ssh到别的机器启动 前记: 这些天一直学习hadoop,学习中也遇到了许多的问题,主要是 ...

  4. leetcode 21

    合并两个有序数列.属于基础的数据结构问题,核心在于对链表的操作. 代码如下: /** * Definition for singly-linked list. * struct ListNode { ...

  5. 一个简单的SpringMVC3 程序

    初学者对于Spring框架的难度:引用Jar包不全,或者不正确: 1.运行界面 2.客户端页面 index.jsp 的代码 <%@ page language="java" ...

  6. SE11

        自省数据及表存储 2014年4月6日 21:37     类似JAVA反射的特性 SAP提供自省数据的机制 这样可以保证程序的灵活性和动态性     1.使用OO中的cl_abap_typed ...

  7. [原]Python 简单文件处理

    仅仅是为了Linux操作方便= =命令行最近没有时间仔细看看,电脑一直都在机房,暂且这般记着吧= = spath="D:/download/baa.txt" f=open(spat ...

  8. PHP session回收机制

    由于PHP的工作机制,它并没有一个daemon线程,来定时地扫描session信息并判断其是否失效.当一个有效请求发生时,PHP会根据全局变量 session.gc_probability/sessi ...

  9. Windows7不能打开telnet功能

    在dos窗口中输入telnet命令提示如下: 解决方法是打开控制面板中的程序和功能,选择打开或关闭Window是功能,如下: 勾选上面的Telnet客户端,然后确定,出现下图.稍等片刻重新打开命令行, ...

  10. SQLServer2005,2000获取表结构:字段名、类型、长度、主键、非空、注释

    SQLServer 2005 SELECT d.name N'TableName', d.xtype N'TableType', a.colorder N'ColumnIndex', a.name N ...