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