module WebMockHTTPClients

def build_request_signature(req, reuse_existing = false)

def build_request_signature(req, reuse_existing = false)
  @request_filter.each do |filter|
    filter.filter_request(req)
  end
  uri = WebMock::Util::URI.heuristic_parse(req.header.request_uri.to_s)
  uri.query = WebMock::Util::QueryMapper.values_to_query(req.header.request_query, notation: WebMock::Config.instance.query_values_notation) if req.header.request_query
  uri.port = req.header.request_uri.port
  headers = req.header.all.inject({}) do |hdrs, header|
    hdrs[header[0]] ||= []
    hdrs[header[0]] << header[1]
    hdrs
  end
  headers = headers_from_session(uri).merge(headers)
  signature = WebMock::RequestSignature.new(
    req.header.request_method.downcase.to_sym,
    uri.to_s,
    body: req.http_body.dump,
    headers: headers
  )
  # reuse a previous identical signature object if we stored one for later use
  if reuse_existing && previous_signature = previous_signature_for(signature)
    return previous_signature
  end
  signature
end