mirror of
https://github.com/lloeki/nanoserve.git
synced 2025-12-06 11:14:40 +01:00
Handle request body according to Content-Length
This commit is contained in:
parent
f3aebdcf0f
commit
88d0824dc8
1 changed files with 21 additions and 1 deletions
|
|
@ -70,6 +70,13 @@ module NanoServe
|
||||||
break if req.headers?
|
break if req.headers?
|
||||||
end
|
end
|
||||||
logger.debug "request:\n" + buf.gsub(/^/, ' ')
|
logger.debug "request:\n" + buf.gsub(/^/, ' ')
|
||||||
|
length = 0
|
||||||
|
while req.content_length? && length < req.content_length
|
||||||
|
data = conn.readpartial(1024)
|
||||||
|
length += data.size
|
||||||
|
req << data
|
||||||
|
end
|
||||||
|
logger.debug "request body: #{length} bytes read"
|
||||||
|
|
||||||
res = Response.new
|
res = Response.new
|
||||||
logger.debug 'calling'
|
logger.debug 'calling'
|
||||||
|
|
@ -88,6 +95,7 @@ module NanoServe
|
||||||
@http_version = nil
|
@http_version = nil
|
||||||
@sep = nil
|
@sep = nil
|
||||||
@headers = {}
|
@headers = {}
|
||||||
|
@body = +''.encode('ASCII-8BIT')
|
||||||
end
|
end
|
||||||
|
|
||||||
def params
|
def params
|
||||||
|
|
@ -100,7 +108,7 @@ module NanoServe
|
||||||
elsif @sep.nil?
|
elsif @sep.nil?
|
||||||
parse_header(line.chomp)
|
parse_header(line.chomp)
|
||||||
else
|
else
|
||||||
@body << line
|
parse_body(line)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -108,6 +116,14 @@ module NanoServe
|
||||||
@sep
|
@sep
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def content_length
|
||||||
|
@headers['content-length'].to_i
|
||||||
|
end
|
||||||
|
|
||||||
|
def content_length?
|
||||||
|
@headers.key?('content-length')
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
REQ_RE = %r{(?<method>[A-Z]+)\s+(?<path>\S+)\s+(?<version>HTTP/\d+.\d+)$}
|
REQ_RE = %r{(?<method>[A-Z]+)\s+(?<path>\S+)\s+(?<version>HTTP/\d+.\d+)$}
|
||||||
|
|
@ -146,6 +162,10 @@ module NanoServe
|
||||||
|
|
||||||
@headers[m[:header].downcase] = m[:value]
|
@headers[m[:header].downcase] = m[:value]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def parse_body(line)
|
||||||
|
@body << line
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Response
|
class Response
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue