????做OTA升級功能時,能直接拿到的往往只是升級包的鏈接,需要我們自己去下載,這時候就需要用到http下載器,下文介紹一個C語言實現的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 1032
Function:
History:
?
審核編輯:湯梓紅
評論
查看更多