????做OTA升級功能時(shí),能直接拿到的往往只是升級包的鏈接,需要我們自己去下載,這時(shí)候就需要用到http下載器,下文介紹一個(gè)C語言實(shí)現(xiàn)的http下載器。
功能
1、支持chunked方式傳輸?shù)南螺d 2、被重定向時(shí)能下載重定向頁面 3、要實(shí)現(xiàn)的接口為int http_download(char *url, char *save_path)
思路
1、解析輸入的URL,分離出主機(jī),端口號,文件路徑的信息 2、解析主機(jī)的DNS 3、填充http請求的頭部,給服務(wù)器發(fā)包 4、解析收到的http頭,提取狀態(tài)碼,Content-length, Transfer-Encoding等字段信息 (1)如果是普通的頭則進(jìn)行接下來的正常收包流程 (2)如果狀態(tài)碼為302,則從頭里提取出重定向地址,用新的地址重新開始下載動作 (3)如果傳送方式是chunked的,則進(jìn)行分段讀取數(shù)據(jù)并拼接 (4)如果是404或其他狀態(tài)碼則打印錯(cuò)誤信息
缺陷
太多錯(cuò)誤處理,讓代碼看起來不太舒服
其他
1、如何移植到?jīng)]有文件系統(tǒng)的系統(tǒng)中? 修改sava_data接口里面的保存就好了 2、如何提高下載速度?
增大讀寫buffer緩沖區(qū)
改為多線程,使用Range字段分段讀取,最后再拼在一起
代碼
?
/************************************************************
Copyright (C), 2016, Leon, All Rights Reserved.
FileName: download.c
coding: UTF-8
Description: 實(shí)現(xiàn)簡單的http下載功能
Author: Leon
Version: 1.0
Date: 2016-12-2 1032
Function:
History:
?
審核編輯:湯梓紅
評論
查看更多