CC-Tweaked/src/main/resources/data/computercraft/lua/rom/programs/http/wget.lua

87 lines
1.7 KiB
Lua

local function printUsage()
print("Usage:")
print("wget <url> [filename]")
print("wget run <url>")
end
local tArgs = { ... }
local run = false
if tArgs[1] == "run" then
table.remove(tArgs, 1)
run = true
end
if #tArgs < 1 then
printUsage()
return
end
local url = table.remove(tArgs, 1)
if not http then
printError("wget requires the http API")
printError("Set http.enabled to true in CC: Tweaked's config")
return
end
local function getFilename(sUrl)
sUrl = sUrl:gsub("[#?].*" , ""):gsub("/+$" , "")
return sUrl:match("/([^/]+)$")
end
local function get(sUrl)
-- Check if the URL is valid
local ok, err = http.checkURL(url)
if not ok then
printError(err or "Invalid URL.")
return
end
write("Connecting to " .. sUrl .. "... ")
local response = http.get(sUrl , nil , true)
if not response then
print("Failed.")
return nil
end
print("Success.")
local sResponse = response.readAll()
response.close()
return sResponse
end
if run then
local res = get(url)
if not res then return end
local func, err = load(res, getFilename(url), "t", _ENV)
if not func then
printError(err)
return
end
local ok, err = pcall(func, table.unpack(tArgs))
if not ok then
printError(err)
end
else
local sFile = tArgs[1] or getFilename(url)
local sPath = shell.resolve(sFile)
if fs.exists(sPath) then
print("File already exists")
return
end
local res = get(url)
if not res then return end
local file = fs.open(sPath, "wb")
file.write(res)
file.close()
print("Downloaded as " .. sFile)
end