'Create a blank request environ (and Request wrapper) with the
given path (path should be urlencoded), and any keys from
environ.
The path will become path_info, with any query string split
off and used.
All necessary keys will be added to the environ, but the
values you pass in will take precedence.  If you pass in
base_url then wsgi.url_scheme, HTTP_HOST, and SCRIPT_NAME will
be filled in from that value.
Any extra keyword will be passed to ``__init__``.'

@classmethod
def blank(cls, path, environ=None, base_url=None, headers=None, POST=None, **kw):

    env = environ_from_url(path)
    if base_url:
        (scheme, netloc, path, query, fragment) = urlparse.urlsplit(base_url)
        if (query or fragment):
            raise ValueError(('base_url    (%r)    cannot    have    a    query    or    fragment' % base_url))
        if scheme:
            env['wsgi.url_scheme'] = scheme
        if netloc:
            if (':' not in netloc):
                if (scheme == 'http'):
                    netloc += ':80'
                elif (scheme == 'https'):
                    netloc += ':443'
                else:
                    raise ValueError(('Unknown    scheme:    %r' % scheme))
            (host, port) = netloc.split(':', 1)
            env['SERVER_PORT'] = port
            env['SERVER_NAME'] = host
            env['HTTP_HOST'] = netloc
        if path:
            env['SCRIPT_NAME'] = url_unquote(path)
    if environ:
        env.update(environ)
    content_type = kw.get('content_type', env.get('CONTENT_TYPE'))
    if (headers and ('Content-Type' in headers)):
        content_type = headers['Content-Type']
    if (content_type is not None):
        kw['content_type'] = content_type
    environ_add_POST(env, POST, content_type=content_type)
    obj = cls(env, **kw)
    if (headers is not None):
        obj.headers.update(headers)
    return obj
