分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

通过curl下载文件

发布时间:2023-09-06 01:57责任编辑:傅花花关键词:url
1. 适用范围
      本文档介绍SylixOS下通过curl中间下载文件的流程,使用者应熟悉SylixOS系统以及curl中间件。

2. 下载流程
2.1 资源准备
    文件下载依赖curl中间件,故下载前需基于SylixOS进行curl中间件移植,移植过程本文档不做详细介绍,请参照《SylixOS下中间件移植手册》。

2.2 下载流程
      文件下载前需获取可用的下载url,使用curl中间件提供的接口进行文件下载。下载流程如程序清单 2.1所示。

程序清单 2.1  文件下载流程

#include <stdio.h>#include <string.h>#include "curl/curl.h"/***************************************************************************** 函数名称: write_data** 功能描述: 回调函数** 输  入  : ptr写数据指针**           size写入块字节数**           nmemb  写数据块数**           stream 目标文件指针** 输  出  : 写入块数** 返  回  : written***************************************************************************/size_t  write_data (void  *ptr, size_t  size, size_t  nmemb, FILE  *stream){    size_t written = fwrite(ptr, size, nmemb, stream);    return written;}/***************************************************************************** 函数名称: fileDownload** 功能描述: 下载函数** 输  入  : pcAddressUrl下载地址**           pcFileName  下载文件名** 输  出  : NONE** 返  回  : ERROR_NONE***************************************************************************/int fileDownload (char  *pcAddressUrl, char  *pcFileName){    CURLcode    curlRet;    CURL        *curl = LW_NULL;    FILE        *fp      = LW_NULL;    char        *url     = pcAddressUrl;                    /*  下载网址                    */    char        *filename= pcFileName;                      /*  下载文件名字                */    curl = curl_easy_init();                                       /*  初始化 curl 会话            */    if (!curl) {        printf("curl_easy_init failed\n");        return  (PX_ERROR);    }    fp = fopen(filename, "w+");                                    /*  打开文件                    */    if (!fp) {        printf("fopen failed\n");        return  (PX_ERROR);    }    curlRet = curl_easy_setopt(curl, CURLOPT_URL, url);            /*  设置 url                    */    if (curlRet != CURLE_OK) {        fclose(fp);        curl_easy_cleanup(curl);        return  (PX_ERROR);    }    curlRet = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);/*  设置回调函数                */    if (curlRet != CURLE_OK) {        fclose(fp);        curl_easy_cleanup(curl);        return  (PX_ERROR);    }    curlRet = curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);      /*  设置写入文件句柄             */    if (curlRet != CURLE_OK) {        fclose(fp);        curl_easy_cleanup(curl);        return  (PX_ERROR);    }    curlRet = curl_easy_perform(curl);                            /*  完成传输函数                */    if (curlRet != CURLE_OK) {        fclose(fp);        curl_easy_cleanup(curl);        return  (PX_ERROR);    }    fclose(fp);    curl_easy_cleanup(curl);                           /*  释放内存                    */    return  (ERROR_NONE);}/***************************************************************************** 函数名称: main** 功能描述: 进程主函数** 输  入  : argc    入参个数**           argv    入参数组** 输  出  : NONE** 返  回  : ERROR_CODE***************************************************************************/int  main (int  argc, char  **argv){    int  iRet = -1;    printf("start download...\n");    /*     *  下载文件     *  UPDATE_URL       下载地址     *  UPDATE_FILE_NAME 下载保存文件名     */    iRet = fileDownload(UPDATE_URL, UPDATE_FILE_NAME);    if (iRet != ERROR_NONE) {        printf("file down failed\n");        return  (PX_ERROR);    }    return  (ERROR_NONE);}

参考资料:libcurl官网源码


通过curl下载文件

原文地址:http://blog.51cto.com/12558126/2122615

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved