51 lines
1.5 KiB
Lua
51 lines
1.5 KiB
Lua
--[[
|
|
Utility for downloading files via http.
|
|
By 00asdf
|
|
]]
|
|
|
|
local argParser = require("argparse").parser("wget", "Utility for downloading files via http")
|
|
:optional("f", "override an existing file")
|
|
:positional("url", "download target")
|
|
:endRequired()
|
|
:positional("filename", "optional name of the file, per default the last part of the url is taken")
|
|
|
|
local ok, opt, pos = argParser:parse(...)
|
|
if not ok then
|
|
print(opt)
|
|
return -1
|
|
end
|
|
local TARGET = pos.url
|
|
local FILENAME
|
|
if not pos.filename then
|
|
local t = TARGET:split("/")
|
|
FILENAME = t[#t]
|
|
if not FILENAME or FILENAME == "" then
|
|
error("The target does not specify a valid filename, please an explicit filename!")
|
|
end
|
|
else
|
|
FILENAME = pos.filename
|
|
end
|
|
|
|
local fs = require "filesystem"
|
|
if not opt.f and fs:fileExists(FILENAME) then
|
|
error(string.format("File '%s' already exists! Specify '-f' to replace the file", FILENAME))
|
|
end
|
|
|
|
print("Downloading from " .. TARGET)
|
|
print("to " .. FILENAME)
|
|
|
|
local http = components:getFirst("internet")
|
|
if not http.isHttpEnabled or not http.isConnectedToWan then
|
|
error("Failed to download: Connection failure, not connected to internet")
|
|
end
|
|
|
|
local response = http:sendHttpRequest(TARGET, "GET")
|
|
if response:getStatusCode() ~= 200 then
|
|
error("Failed to download: Server responded with " .. tostring(response:getStatusCode()))
|
|
end
|
|
|
|
local content = response:getResponseBody()
|
|
print("Downloaded content, writing to file...")
|
|
fs:writeAllText(FILENAME, content)
|
|
print("Successfully downloaded file!")
|