mirror of
https://github.com/lunarmodules/luasocket.git
synced 2024-12-25 12:08:21 +01:00
http.request: possibility to defer body receiving if sink is not specified
In this case, the first returned value is not `1`, but a function, taking two optional arguments: `sink` and `step`. If the function is run without a `sink`, it simply closes the handle, ignoring the body.
This commit is contained in:
parent
1fad162690
commit
0278463377
22
src/http.lua
22
src/http.lua
@ -368,8 +368,16 @@ end
|
||||
local code, status = h:receivestatusline()
|
||||
-- if it is an HTTP/0.9 server, simply get the body and we are done
|
||||
if not code then
|
||||
if nreqt.sink then
|
||||
h:receive09body(status, nreqt.sink, nreqt.step)
|
||||
return 1, 200
|
||||
else
|
||||
return socket.protect(function(sink, step)
|
||||
if sink then
|
||||
return h:receive09body(status, sink, step or nreqt.step)
|
||||
end
|
||||
end), 200
|
||||
end
|
||||
elseif code == 408 then
|
||||
return 1, code
|
||||
end
|
||||
@ -387,11 +395,23 @@ end
|
||||
return tredirect(reqt, headers.location)
|
||||
end
|
||||
-- here we are finally done
|
||||
local receivebody
|
||||
if shouldreceivebody(nreqt, code) then
|
||||
if nreqt.sink then
|
||||
h:receivebody(headers, nreqt.sink, nreqt.step)
|
||||
else
|
||||
receivebody = socket.protect(function(sink, step)
|
||||
local res, err
|
||||
if sink then
|
||||
res, err = h:receivebody(headers, sink, step or nreqt.step)
|
||||
end
|
||||
h:close()
|
||||
return 1, code, headers, status
|
||||
return res, err
|
||||
end)
|
||||
end
|
||||
end
|
||||
if not receivebody then h:close() end
|
||||
return receivebody or 1, code, headers, status
|
||||
end
|
||||
|
||||
-- turns an url and a body into a generic request
|
||||
|
Loading…
Reference in New Issue
Block a user