10. C 使用 http 协议 下载文件

实现http的下载

用C语言实现简单的http下载接口,方便移植到其他程序中使用

要满足的功能:

  • 支持chunked方式传输的下载
  • 被重定向时能下载重定向页面
  • 要实现的接口为int http_download(char *url, char *save_path)

思路:

  1. 解析输入的URL,分离出主机,端口号,文件路径的信息
  2. 解析主机的DNS
  3. 填充http请求的头部,给服务器发包
  4. 解析收到的http头,提取状态码,Content-length, Transfer-Encoding等字段信息
    • 如果是普通的头则进行接下来的正常收包流程
    • 如果状态码为302,则从头里提取出重定向地址,用新的地址重新开始下载动作
    • 如果传送方式是chunked的,则进行分段读取数据并拼接
    • 如果是404或其他状态码则打印错误信息

缺陷:

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

其他:

  • 如何移植到没有文件系统的系统中?
    修改sava_data接口里面的保存就好了

  • 如何提高下载速度?

    • 增大读写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:
    

转自:https://blog.csdn.net/jasonzeng/article/details/62043894

你可能感兴趣的:(C)