'Create a new Request with the same attributes except for those
given new values.'

def replace(self, *args, **kwargs):

    for x in ['url', 'method', 'headers', 'body', 'cookies', 'meta', 'encoding', 'priority', 'dont_filter', 'callback', 'errback']:
        kwargs.setdefault(x, getattr(self, x))
    cls = kwargs.pop('cls', self.__class__)
    return cls(*args, **kwargs)
