2026-04-26 15:10:21 +08:00
2026-04-26 15:10:21 +08:00
2026-04-26 14:53:53 +08:00
2026-04-26 15:10:59 +08:00

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 headers
  • binary (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()

工作原理

  1. 发送 Range 请求获取文件总大小(通过 Content-Range header
  2. 如果服务器支持 Range返回 206按 15MiB 分块下载
  3. 合并所有分块为完整文件
  4. 返回兼容原版 http.get 的 response 对象

兼容性

  • 服务器需支持 HTTP Range 请求RFC 7233
  • 不支持 Range 的服务器会降级为单次请求(仅限小文件)

限制

  • 每块固定 15MiB
  • 最终仍会将全部数据合并到内存中(不写缓存文件)
  • 不支持 POST 等其他 HTTP 方法
Description
用于解决cc请求大文件而制作的nigex代理和配套lua库
Readme GPL-2.0 65 KiB
Languages
Lua 100%