Skip to content

Instantly share code, notes, and snippets.

@ximus
Created March 18, 2013 18:08
Show Gist options
  • Save ximus/5189384 to your computer and use it in GitHub Desktop.
Save ximus/5189384 to your computer and use it in GitHub Desktop.
def request(req, body = nil, &block) # :yield: +response+
unless started?
start {
req['connection'] ||= 'close'
return request(req, body, &block)
}
end
if proxy_user()
unless use_ssl?
req.proxy_basic_auth proxy_user(), proxy_pass()
end
end
# set body
req.set_body_internal body
begin_transport req
# if we expect 100-continue then send a header first
send_only = ((req.is_a?(Post)||req.is_a?(Put)) && (req['expect']=='100-continue')) ? :header : nil
req.exec @socket, @curr_http_version, edit_path(req.path), send_only
begin
res = HTTPResponse.read_new(@socket)
# if we expected 100-continue then send a body
if res.is_a?(HTTPContinue) && send_only && req['content-length'].to_i > 0
req.exec @socket, @curr_http_version, edit_path(req.path), :body
end
end while res.kind_of?(HTTPContinue)
res.reading_body(@socket, req.response_body_permitted?) {
yield res if block_given?
}
end_transport req, res
res
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment