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
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.