C语言实现http下载器(附代码)

C语言实现http的下载器。

例:做OTA升级功能时,我们能直接拿到的往往只是升级包的链接,需要我们自己去下载,这时候就需要用到http下载器。

这里分享一个:

功能:

1、支持chunked方式传输的下载

2、被重定向时能下载重定向页面

3、要实现的接口为int http_download(char *url, char *save_path)

思路:

1、解析输入的URL,分离出主机,端口号,文件路径的信息

2、解析主机的DNS

3、填充http请求的头部,给服务器发包

4、解析收到的http头,提取状态码,Content-length, Transfer-Encoding等字段信息

(1)如果是普通的头则进行接下来的正常收包流程

(2)如果状态码为302,则从头里提取出重定向地址,用新的地址重新开始下载动作

(3)如果传送方式是chunked的,则进行分段读取数据并拼接

(4)如果是404或其他状态码则打印错误信息

缺陷:

  • 太多错误处理,让代码看起来不太舒服

其他:

1、如何移植到没有文件系统的系统中?

修改sava_data接口里面的保存就好了

2、如何提高下载速度?

  • 增大读写buffer缓冲区

  • 改为多线程,使用Range字段分段读取,最后再拼在一起

代码:

/************************************************************
Copyright (C), 2016, Leon, All Rights Reserved.
FileName: download.c
coding: UTF-8
Description: 实现简单的http下载功能
Author: Leon
Version: 1.0
Date: 2016-12-2 10:49:32
Function:

History:
    

c语言基础学习的个人空间-c语言基础学习个人主页-哔哩哔哩视频哔哩哔哩c语言基础学习的个人空间,提供c语言基础学习分享的视频、音频、文章、动态、收藏等内容,关注c语言基础学习账号,第一时间了解UP注动态。每天分享一个编程技术C/C++游戏源码素材及各种安装包:724050348 私信不常看!https://space.bilibili.com/2061978075?spm_id_from=333.788.0.0

你可能感兴趣的:(C语言,计算机/it,编程语言,c语言,开发语言,c++,数据结构,网络)