本次給大家分享一個C語言實現http的下載器。比如做OTA升級功能時,我們能直接拿到的往往只是升級包的鏈接,需要我們自己去下載,這時候就需要用到http下載器。
這里分享一個:
功能:
1、支持chunked方式傳輸的下載
2、被重定向時能下載重定向頁面
3、要實現的接口為int http_download(char *url, char *save_path)
思路:
1、解析輸入的URL,分離出主機,端口號,文件路徑的信息
2、解析主機的DNS
3、填充http請求的頭部,給服務器發(fā)包
4、解析收到的http頭,提取狀態(tài)碼,Content-length, Transfer-Encoding等字段信息
(1)如果是普通的頭則進行接下來的正常收包流程
(2)如果狀態(tài)碼為302,則從頭里提取出重定向地址,用新的地址重新開始下載動作
(3)如果傳送方式是chunked的,則進行分段讀取數據并拼接
(4)如果是404或其他狀態(tài)碼則打印錯誤信息
缺陷:
太多錯誤處理,讓代碼看起來不太舒服
其他:
1、如何移植到沒有文件系統(tǒng)的系統(tǒng)中?
修改sava_data接口里面的保存就好了
2、如何提高下載速度?
增大讀寫buffer緩沖區(qū)
改為多線程,使用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:
????
?
?
審核編輯:湯梓紅
?
評論
查看更多