Re: Flashget的工作怎辦到的
※ 引述《LPH66.bbs@ptt.cc (涼宮春日症候群)》之銘言:
> ※ 引述《DrLiang.bbs@bbs.ccns.ncku.edu.tw (台灣黑山豬)》之銘言:
> : 諸如 FlashGet 的軟體之所以能快速下載檔案,
> : 是因為他將檔案分割為數份並下載,下載完成後再進行合併。
> : 我比較好奇的是,這種軟體是如何在Server端分割檔案?
> 這我剛好知道
> HTTP Request有一種header是可以指定起始點的
> Range: bytes=範圍 以數字-數字表示 單位為Byte
> ex: Range: bytes=1307176- 就表示從1307176byte開始抓到完
> 不過當然要看伺服器吃不吃
> 伺服器吃的話會回傳206 Partial Content 並從那個地方開始
> 伺服器不理這個header則正常傳回200 OK 並從頭開始
> 所以FlashGet就是一次開很多條連線 後面連線的就用Range: 從後面開始抓這樣
這邊有個呼叫 InternetReadFile API 來做續傳的程式碼:
http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx
?Action=Function&Module=12&Function=67
因此,實體檔案先開完整大小,再以 binary 方式直接寫入指定位置即可多線下載。
若使用 Windows API ,則必須改註冊檔,讓他可以多線連接,所以自己寫會比較好。
另外,線數最好不要開太多,先前我試過針對單一網站開到 256 線,結果
proxy.hinet.net 誤判為惡意程式直接把我的要求全擋掉了,問 HiNet客服說沒這
樣設定,據其他討論區技術人員說,這應該是 proxy預設值,只是 HiNet客服不清
楚,他舉例說,例如 ISA Server 預設是 10 線,超過就擋。HiNet 我試過 32 線
還不會擋。
--
______________________________________________________本版因有你們而壯大
T.L. Cheng 子璉
_______________________________________________________________________
VB討論:成大資工、程式設計樂園等採tw.bbs.comp.lang.basic信區,請各站加入轉信
徐昇網&論壇&API&輔助說明檔&福傳語言&原始碼 http://tlcheng.twbbs.org/wwwmap.htm
培基語言網頁 http://tlcheng.twbbs.org/TLCheng/Basic/
--
oRigiN: 成大資工BBS站 (140.116.246.178)
@bbs.csie.ncku.edu.tw FrOm:59-127-4-39.HINET-IP.hinet.net
討論串 (同標題文章)