def request(req, body = nil, &block)  # :yield: +response+
      unless started?
        start {
          req['connection'] ||= 'close'
          return request(req, body, &block)
        }
      end
      if proxy_user()
        req.proxy_basic_auth proxy_user(), proxy_pass() unless use_ssl?
      end
      req.set_body_internal body
      res = transport_request(req, &block)
      if sspi_auth?(res)
        sspi_auth(req)
        res = transport_request(req, &block)
      end
      res
    end
Sends an HTTPRequest object +req+ to the HTTP server.

If +req+ is a Net::HTTP::Post or Net::HTTP::Put request containing
data, the data is also sent. Providing data for a Net::HTTP::Head or
Net::HTTP::Get request results in an ArgumentError.

Returns an HTTPResponse object.

When called with a block, passes an HTTPResponse object to the block.
The body of the response will not have been read yet;
the block can process it using HTTPResponse#read_body,
if desired.

This method never raises Net::* exceptions.