                 key, value in
                 request.allHTTPHeaderFields?[key] == value
                 }
+            && body?.httpData == requestBody
         }
     }
 

    var headers = [String:String]()
    var body: HTTPBodyConvertible?

    func matches(_ request: URLRequest) -> Bool
        {
        return request.httpMethod == method
            && request.url?.absoluteString == url

            defer
                { Self.requestInitialization.decrement() }

            let body = extractBody(from: request)

            let stubs = Self.stubs
            guard let stub = stubs.first(where: { $0.matcher.matches(request, withBody: body) }) else
                {
                fatalError(
                    """
                    Unstubbed network request:
                        \(request.httpMethod ?? "<nil method>") \(request.url?.absoluteString ?? "<nil URL>")
                        headers: \(request.allHTTPHeaderFields ?? [:])
                        body: \(body?.description ?? "nil")

                    Available stubs:
                        \(stubs.map { $0.description }.joined(separator: "\n    "))
