cc_big_http
ComputerCraft: Tweaked 的分块下载 HTTP 库。通过 HTTP Range 请求将大文件分割成 15MiB 的块进行下载,规避单次请求大小限制。
特性
- 自动分块下载(每块 15MiB)
- 保留自定义 HTTP headers
- 兼容原版
http.get的 response 对象接口 - 支持服务器不支持 Range 的降级处理
- 禁用压缩以确保字节位置准确
安装
将 cc_big_http.lua 放入你的项目目录。
wget https://git.liulikeji.cn/xingluo/cc_big_http/raw/branch/main/cc_big_http.lua
使用
local httpx = require("cc_big_http")
-- 基础用法(类似 http.get)
local response, err = httpx.get("https://example.com/largefile.bin")
if not response then
print("Error: " .. err)
return
end
local data = response.readAll()
response.close()
API
httpx.get(url, [headers], [binary])
下载文件并返回 response 对象。
参数:
url(string) - 下载链接headers(table, 可选) - 自定义 HTTP headersbinary(boolean, 可选) - 是否以二进制模式读取(默认 false)
返回值:
- 成功:response 对象
- 失败:
nil, error_message, [response_object]
示例:
-- 字符串 URL
local res = range_http.get("https://example.com/file.txt")
-- 带 headers
local res = range_http.get("https://example.com/file.bin", {
["User-Agent"] = "MyBot/1.0",
["Authorization"] = "Bearer token123"
})
-- 二进制模式
local res = range_http.get("https://example.com/file.bin", nil, true)
-- 表格形式(完整配置)
local res = range_http.get({
url = "https://example.com/file.bin",
headers = { ["User-Agent"] = "MyBot/1.0" },
binary = true,
timeout = 120,
redirect = true
})
Response 对象
返回的 response 对象支持以下方法:
read([count])- 读取指定字节数(或单个字符/字节)readAll()- 读取全部内容readLine([withTrailing])- 按行读取getResponseCode()- 返回 HTTP 状态码和消息getResponseHeaders()- 返回响应 headers 表close()- 关闭响应
local response = range_http.get("https://example.com/file.txt")
-- 读取全部
local content = response.readAll()
-- 或逐行读取
while true do
local line = response.readLine()
if not line then break end
print(line)
end
-- 检查状态
local code, msg = response.getResponseCode()
print("Status: " .. code .. " " .. msg)
response.close()
工作原理
- 发送 Range 请求获取文件总大小(通过
Content-Rangeheader) - 如果服务器支持 Range(返回 206),按 15MiB 分块下载
- 合并所有分块为完整文件
- 返回兼容原版
http.get的 response 对象
兼容性
- 服务器需支持 HTTP Range 请求(RFC 7233)
- 不支持 Range 的服务器会降级为单次请求(仅限小文件)
限制
- 每块固定 15MiB
- 最终仍会将全部数据合并到内存中(不写缓存文件)
- 不支持 POST 等其他 HTTP 方法
Languages
Lua
100%