mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-08-10 00:01:27 -04:00
fixing the chunk feature for request bodies (HTTP/1)
This commit is contained in:
parent
54d5b42d90
commit
526418f5e5
@ -134,6 +134,10 @@ module HTTPX
|
||||
def set_request_headers(request)
|
||||
request.headers["host"] ||= request.authority
|
||||
request.headers["connection"] ||= "keep-alive"
|
||||
if !request.headers.key?("content-length") &&
|
||||
request.body.bytesize == Float::INFINITY
|
||||
request.chunk!
|
||||
end
|
||||
end
|
||||
|
||||
def headline_uri(request)
|
||||
|
@ -38,6 +38,8 @@ module HTTPX
|
||||
def_delegator :@body, :<<
|
||||
|
||||
def_delegator :@body, :empty?
|
||||
|
||||
def_delegator :@body, :chunk!
|
||||
|
||||
def initialize(verb, uri, options = {})
|
||||
@verb = verb.to_s.downcase.to_sym
|
||||
@ -114,7 +116,7 @@ module HTTPX
|
||||
end
|
||||
return if @body.nil?
|
||||
@headers["content-type"] ||= @body.content_type
|
||||
@headers["content-length"] = @body.bytesize unless chunked?
|
||||
@headers["content-length"] = @body.bytesize unless unbounded_body?
|
||||
end
|
||||
|
||||
def each(&block)
|
||||
@ -132,6 +134,7 @@ module HTTPX
|
||||
|
||||
def empty?
|
||||
return true if @body.nil?
|
||||
return false if chunked?
|
||||
bytesize.zero?
|
||||
end
|
||||
|
||||
@ -154,9 +157,17 @@ module HTTPX
|
||||
encoded
|
||||
end
|
||||
|
||||
def unbounded_body?
|
||||
chunked? || @body.bytesize == Float::INFINITY
|
||||
end
|
||||
|
||||
def chunked?
|
||||
@headers["transfer-encoding"] == "chunked"
|
||||
end
|
||||
|
||||
def chunk!
|
||||
@headers.add("transfer-encoding", "chunked")
|
||||
end
|
||||
end
|
||||
|
||||
def transition(nextstate)
|
||||
|
@ -15,15 +15,15 @@ module HTTPX::Transcoder
|
||||
@raw = body
|
||||
end
|
||||
|
||||
def bytesize
|
||||
def bytesize
|
||||
if @raw.respond_to?(:bytesize)
|
||||
@raw.bytesize
|
||||
elsif @raw.respond_to?(:to_ary)
|
||||
@raw.map(&:bytesize).reduce(0, :+)
|
||||
elsif @raw.respond_to?(:size)
|
||||
@raw.size || Float::INFINITY
|
||||
elsif @raw.respond_to?(:each)
|
||||
Float::INFINITY
|
||||
elsif @raw.respond_to?(:size)
|
||||
@raw.size
|
||||
else
|
||||
raise Error, "cannot determine size of body: #{@raw.inspect}"
|
||||
end
|
||||
|
@ -28,8 +28,8 @@ module HTTPX::Transcoder
|
||||
end
|
||||
end
|
||||
|
||||
def encode(json)
|
||||
Encoder.new(json)
|
||||
def encode(chunks)
|
||||
Encoder.new(chunks)
|
||||
end
|
||||
end
|
||||
register "chunker", Chunker
|
||||
|
Loading…
x
Reference in New Issue
Block a user