c/c++常用代码--使用libcurl下载文件

#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)
    {
        /* 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;
};
时间: 2024-12-15 08:55:28

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

使用libcurl下载文件小例

libcurl是一个很强大的开源网络处理库,支持包括HTTP.HTTPS.FTP--一系列网络协议.用它来进行HTTP的get\post 或者下载文件更是小菜一碟,chrome内核都用到了它,本文主要讲解一个使用curl下载文件的小例. 首先是去下载curl的最新源代码,然后编译成动态库或者静态库:然后把头文件和库文件拿出来加入到我们自己的工程中,引用声明: #include "curl.h" #ifdef _DEBUG #pragma comment(lib, "../De

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

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace WindowsFormsApplication1 { public parti

PHP代码实现远程下载文件到本地的函数

<?php echo httpcopy("http://www.baidu.com/img/baidu_sylogo1.gif"); function httpcopy($url, $file="", $timeout=60) { $file = empty($file) ? pathinfo($url,PATHINFO_BASENAME) : $file; $dir = pathinfo($file,PATHINFO_DIRNAME); !is_dir($d

js发送post请求下载文件

大家都知道ajax是不能直接下载文件的,所以一般都是通过一个超链接的形式去下载一个文件 但是当牵扯到需要发送很多数据到服务器上再下载的时候超链接的形式就有些太过勉强了 如下是一个工具方法(依赖jquery) 可以通过发送多数据的情况下下载文件,代码如下: /*===================下载文件 * options:{ * url:'', //下载地址 * data:{name:value}, //要发送的数据 * method:'post' * } */ var DownLoadFi

Java中实现FTP上传下载文件的功能,完整代码

一个JAVA 实现FTP功能的代码,包括了服务器的设置模块,并包括有上传文件至FTP的通用方法.下载文件的通用方法以及删除文件.在ftp服务器上穿件文件夹.检测文件夹是否存在等,里面的有些代码对编写JAVA文件上传或许有参考价值,Java FTP主文件代码: package ftpDemo;         import java.io.DataOutputStream;         import java.io.InputStream;         import java.io.Out

批量去除Teleport Pro整站下载文件冗余代码

teleport pro tppabs标签批量删除 teleport pro tppabs标签批量删除 使 用Teleport Pro下载的网页代码中包含了很多垃圾代码,比如下载的html网页代码中会出现tppabs标签,而且还会将所有的href标签中加入了很多垃圾代码, 在css会加入了tpa标签,这些都是冗余代码,可以将其全部删除,但是由于代码太多,我们不可能一个个删除,因此可以使用Dreamweaver的查找 /替换工具中的正则表达式来进行替换.1.替换tppabs标签,使用Dreamwe

libcurl开源库在Win7 + VS2012环境下编译、配置详解 以及下载文件并显示下载进度 demo(转载)

转载:http://blog.csdn.net/fengshuiyue/article/details/39530093(基本教程) 转载:https://my.oschina.net/u/1420791/blog/198247 转载:http://www.cnblogs.com/flylong0204/p/4723155.html 转载:http://www.tuicool.com/articles/VNRzEbq 转载:http://blog.csdn.net/hei_ya/article/

SFTP上传下载文件、文件夹常用操作

SFTP上传下载文件.文件夹常用操作 1.查看上传下载目录lpwd 2.改变上传和下载的目录(例如D盘):lcd  d:/ 3.查看当前路径pwd 4.下载文件(例如我要将服务器上tomcat的日志文件取出来)进入你要下的文件所在的文件夹:cd /usr/apache-tomcat-6.0.39/logs/下载:get catalina.out 5.上传文件(例如我要上传一个文件到usr目录下)进入你想要上传文件的目录cd /usr上传文件put do.sh 6.上传下载文件夹格式:下载文件夹g

C# 从服务器下载文件代码

一.//TransmitFile实现下载 protected void Button1_Click(object sender, EventArgs e) { /* 微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite 下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题. 代码如下: */ Response.ContentType = "application/x-zip-compressed&q