Не-е, нельзя быть таким пессимистичным. Всё можно, и вопрос решается очень легко. В HTTP/1.1 есть хедер Range, который позволяет скачивать файлы кусками. Кроме того, OC умеет посылать и получать хедеры.
local socket = component.internet.request("https://logs.s7.mcskill.ru/Hitechcraft_Public_Logs/public_logs/Hitechcraft_Public_Logs/14-02-2020.txt", nil, {
Range = ("bytes=%d-"):format(start)
})
local data = ""
while true do
local chunk = socket.read()
if not chunk then
break
end
data = data .. chunk
end
local _, _, headers = socket.response()
print("Got: " .. #data)
print("Content-Length: " .. headers["Content-Length"][1])
print("Content-Range: " .. headers["Content-Range"][1])
Вместо start подставить количество байт, уже прочитанных. Там указывается начало диапазона номером байта (начиная с 0), от которого нужно выдать ответ. См. доки.
Поэтому тактика такая:
Посылаем запрос с методом HEAD (4 параметр к component.internet.request), чтобы получить только хедеры.
Читаем в хедерах значение Content-Length.
Начинаем запрашивать куски файла с конца, пока не наберём нужно кол-во строк.
После получения начальных строк запомним позицию последнего байта и дальше запрашиваем инфу после него.