English | 简体中文
A C++ file download library.
Multi-protocol, such as HTTP(s), FTP(s)...
Segmented downloads and breakpoint transmission.
Limit download speed.
Configure disk cache.
Support downloading large files (TB level).
Compatible with server leeching detection(or limit).
The zoe
library has been included in Microsoft's vcpkg, you can use the following command to install zoe
:
Clone and setup vcpkg (See more detail on https://github.com/microsoft/vcpkg)
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
PS> bootstrap-vcpkg.bootstrap
Linux:~/$ ./bootstrap-vcpkg.sh
Install zoe
PS> .\vcpkg install zoe [--triplet x64-windows-static/x64-windows/x64-windows-static-md and etc...]
Linux:~/$ ./vcpkg install zoe
Step 1: Install dependencies
I prefer to use vcpkg
to install dependencies. Of course, this is not the only way, you can install dependencies through any ways.
Recommend: add the directory where vcpkg.exe resides to the PATH environment variable.
libcurl
# if you want support non-http protocol, such as ftp, the [non-http] option must be specified.
vcpkg install curl[non-http]:x86-windows
gtest
vcpkg install gtest:x86-windows
Step 2: Compile
Firstly using CMake to generate project or makefile, then comiple it:
Windows Sample:
cmake.exe -G "Visual Studio 15 2017" -DBUILD_SHARED_LIBS=ON -DBUILD_TESTS=ON -S %~dp0 -B %~dp0build
Linux Sample:
cmake -DBUILD_SHARED_LIBS=ON -DBUILD_TESTS=ON
# If using vcpkg to install dependencies, you have to special CMAKE_TOOLCHAIN_FILE
cmake -DCMAKE_TOOLCHAIN_FILE=/xxx/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-linux -DBUILD_SHARED_LIBS=ON -DBUILD_TESTS=ON
make
#include <iostream>
#include "zoe.h"
int main(int argc, char** argv) {
using namespace zoe;
Zoe::GlobalInit();
Zoe z;
z.setThreadNum(10); // Optional
z.setTmpFileExpiredTime(3600); // Optional
z.setDiskCacheSize(20 * (2 << 19)); // Optional
z.setMaxDownloadSpeed(50 * (2 << 19)); // Optional
z.setHashVerifyPolicy(ALWAYS, MD5, "6fe294c3ef4765468af4950d44c65525"); // Optional, support MD5, CRC32, SHA256
// There are more options available, please check zoe.h
z.setVerboseOutput([](const utf8string& verbose) { // Optional
printf("%s\n", verbose.c_str());
});
z.setHttpHeaders({ // Optional
{u8"Origin", u8"http://xxx.xxx.com"},
{u8"User-Agent", u8"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"}
});
std::shared_future<Result> res = z.start(
u8"http://xxx.xxx.com/test.exe", u8"D:\\test.exe",
[](Result result) { // Optional
// result callback
},
[](int64_t total, int64_t downloaded) { // Optional
// progress callback
},
[](int64_t byte_per_secs) { // Optional
// real-time speed callback
});
res.wait();
Zoe::GlobalUnInit();
return 0;
}
zoe_tool
is command-line tool based on zoe
library.
Usage:
zoe_tool URL TargetFilePath [ThreadNum] [DiskCacheMb] [MD5] [TmpExpiredSeconds] [MaxSpeed]
1
.20Mb
.