libcurl實現斷點續傳

2021-07-04 08:44:05 字數 1100 閱讀 5314

實現斷點續傳主要就是通過curl_easy_setopt設定好curlopt_resume_from_large屬性完成

#include // get the local file size,return -1 if failed

_off_t getlocalfilelength(string path)

return ret;

}

int ret = curl_easy_setopt(easy_handle, curlopt_resume_from_large, resumebyte);

resumebyte的型別不對或者超過了伺服器檔案的content-length時,curl_easy_perform都會返回錯誤

那麼如何得到伺服器上的檔案大小,我們可以通過libcurl傳送請求header,返回的content-length就是檔案大小

// 獲取伺服器上的檔案大小

double getdownloadfilelength(string url)

// 僅獲取http頭

ret = curl_easy_setopt(easy_handle, curlopt_url, url.c_str());

ret |= curl_easy_setopt(easy_handle, curlopt_header, 1l);

ret |= curl_easy_setopt(easy_handle, curlopt_nobody, 1l);

if (ret != curle_ok)

ret = curl_easy_perform(easy_handle);

if (ret != curle_ok)

// 沒有查詢到的話size=-1

ret = curl_easy_getinfo(easy_handle, curlinfo_content_length_download, &size);

if (ret != curle_ok)

} while (0);

curl_easy_cleanup(easy_handle);

return size;

}

實現HTTP斷點續傳

在http協議中,獲取資源可以使用get方法,但在使用get方法指定乙個資源後,會獲取到該資源的所有位元組。在http協議中,提供range屬性,可以指定獲取資源某一段資料。如使用telnet連線www.cz88.net 的80埠 會獲取如下資料 ht失去了跟主機的連線。在獲取的報文中,可以看到co...

symbian實現斷點續傳

斷點續傳的原理 假設伺服器網域名稱為wwww.sjtu.edu.cn,檔名為down.zip。仔細看一下就會發現多了一行range bytes 2000070 這一行的意思就是告訴伺服器down.zip這個檔案從2000070位元組開始傳,前面的位元組不用傳了。伺服器收到這個請求以後,返回的資訊如下...

ASIHTTPRequest實現斷點續傳

asihttprequest可以實現斷點續傳。網上有一些介紹類似使用 request setallowresumeforfiledownloads yes 不過,通過asihttprequest的非同步請求以及delegate還是可以實現斷點續傳的。本文還是以grails編寫斷點續傳伺服器端為例。非...