def build_request_signature(req, reuse_existing = false)
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
uri = uri.omit(:userinfo)
@request_filter.each do |filter|
filter.filter_request(req)
end
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)
if auth_cred = auth_cred_from_www_auth(req) || auth_cred_from_headers(headers)
remove_authorization_header headers
uri.userinfo = userinfo_from_auth_cred auth_cred
end
signature = WebMock::RequestSignature.new(
req.header.request_method.downcase.to_sym,
uri.to_s,
:body => req.http_body.dump,
:headers => headers
)
if reuse_existing && previous_signature = previous_signature_for(signature)
return previous_signature
end
signature
end