module WebMockHTTPClients

def do_get(req, proxy, conn, stream = false, &block)

def do_get(req, proxy, conn, stream = false, &block)
  clear_thread_variables unless conn.async_thread
  request_signature = build_request_signature(req, :reuse_existing)
  WebMock::RequestRegistry.instance.requested_signatures.put(request_signature)
  if webmock_responses[request_signature]
    webmock_response = webmock_responses.delete(request_signature)
    response = build_httpclient_response(webmock_response, stream, req.header, &block)
    @request_filter.each do |filter|
      filter.filter_response(req, response)
    end
    res = conn.push(response)
    WebMock::CallbackRegistry.invoke_callbacks(
      {lib: :httpclient}, request_signature, webmock_response)
    res
  elsif WebMock.net_connect_allowed?(request_signature.uri)
    # in case there is a nil entry in the hash...
    webmock_responses.delete(request_signature)
    res = if stream
      do_get_stream_without_webmock(req, proxy, conn, &block)
    elsif block
      body = ''
      do_get_block_without_webmock(req, proxy, conn) do |http_res, chunk|
        if chunk && chunk.bytesize > 0
          body += chunk
          block.call(http_res, chunk)
        end
      end
    else
      do_get_block_without_webmock(req, proxy, conn)
    end
    res = conn.pop
    conn.push(res)
    if WebMock::CallbackRegistry.any_callbacks?
      webmock_response = build_webmock_response(res, body)
      WebMock::CallbackRegistry.invoke_callbacks(
        {lib: :httpclient, real_request: true}, request_signature,
        webmock_response)
    end
    res
  else
    raise WebMock::NetConnectNotAllowedError.new(request_signature)
  end
end