def self.request_signature_from_request(net_http, request, body = nil)
protocol = net_http.use_ssl? ? "https" : "http"
path = request.path
path = WebMock::Util::URI.heuristic_parse(request.path).request_uri if request.path =~ /^http/
if request["authorization"] =~ /^Basic /
userinfo = WebMock::Util::Headers.decode_userinfo_from_header(request["authorization"])
userinfo = WebMock::Util::URI.encode_unsafe_chars_in_userinfo(userinfo) + "@"
else
userinfo = ""
end
uri = "#{protocol}://#{userinfo}#{net_http.address}:#{net_http.port}#{path}"
method = request.method.downcase.to_sym
headers = Hash[*request.to_hash.map {|k,v| [k, v]}.inject([]) {|r,x| r + x}]
headers.reject! {|k,v| k =~ /[Aa]uthorization/ && v.first =~ /^Basic / }
if request.body_stream
body = request.body_stream.read
request.body_stream = nil
end
if body != nil && body.respond_to?(:read)
request.set_body_internal body.read
else
request.set_body_internal body
end
WebMock::RequestSignature.new(method, uri, :body => request.body, :headers => headers)
end