I'm not sure why ruby doesn't provide the ability to send the request
without reading the response, but it's fairly trivial to split the
Net::HTTP.request method into two halves to do so, as per below:
require 'net/http'
module Net
class HTTP < Protocol
# pasted first half of HTTP.request that writes the request to the
server,
# does not return HTTPResponse and does not take a block
def request_async(req, body = nil)
if proxy_user()
unless use_ssl?
req.proxy_basic_auth proxy_user(), proxy_pass()
end
end
req.set_body_internal body
begin_transport req
req.exec @socket, @curr_http_version, edit_path(req.path)
end
# second half of HTTP.request that yields or returns the response
def read_response(req, body = nil, &block) # :yield: +response+
begin
res = HTTPResponse.read_new(@socket)
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
end
end
# Example usage for a non-blocking GET without following redirects:
http = Net::HTTP.new('www.google.com')
req = Net::HTTP::Get.new('/')
http.start
begin
http.request_async(req)
# do other stuff
res = http.read_response(req)
ensure
http.finish
end
res.value # raise if error
p res.body
--
Posted via http://www.ruby-forum.com/.