mirror of
https://github.com/kepler155c/opus
synced 2024-12-29 01:50:27 +00:00
proper fix for builtin broken http.get
This commit is contained in:
parent
a7069f7ea8
commit
7b225a7747
35
sys/init/1.http.lua
Normal file
35
sys/init/1.http.lua
Normal file
@ -0,0 +1,35 @@
|
||||
--[[
|
||||
FIX for http.get
|
||||
currently, when 2 requests are generated at same time (diff coroutines) they both
|
||||
will receive the same file handle. This change will ensure each request gets the
|
||||
proper response.
|
||||
--]]
|
||||
|
||||
local http = _G.http
|
||||
|
||||
local reqs = { }
|
||||
|
||||
local function wrapRequest(_url, ...)
|
||||
local ok, err = http.request(...)
|
||||
if ok then
|
||||
while true do
|
||||
local event, param1, param2, param3 = os.pullEvent()
|
||||
|
||||
if event == "http_success"
|
||||
and param1 == _url
|
||||
and not reqs[tostring(param2)] then
|
||||
|
||||
reqs[tostring(param2)] = true
|
||||
return param2
|
||||
|
||||
elseif event == "http_failure" and param1 == _url then
|
||||
return nil, param2, param3
|
||||
end
|
||||
end
|
||||
end
|
||||
return nil, err
|
||||
end
|
||||
|
||||
http.safeGet = function(_url, _headers, _binary)
|
||||
return wrapRequest(_url, _url, nil, _headers, _binary)
|
||||
end
|
@ -536,7 +536,7 @@ end
|
||||
|
||||
--[[ loading and running functions ]] --
|
||||
function Util.httpGet(url, headers, isBinary)
|
||||
local h, msg = http.get(url, headers, isBinary)
|
||||
local h, msg = http.safeGet(url, headers, isBinary)
|
||||
if h then
|
||||
local contents = h.readAll()
|
||||
h.close()
|
||||
|
Loading…
Reference in New Issue
Block a user