简介

获取请求级环境信息

@get_mapping('/echo/{id}')
async def echo(request: Request):
    return {
        'remote': request.remote,
        'method': request.method,
        'route': request.match_info.get_info()['formatter'],
        'url': {
            'host': request.url.host,
            'scheme': request.url.scheme,
            'path': request.url.path,
            'query_string': request.url.query_string,
            'path_qs': request.url.path_qs,
            'url': str(request.url),
        }
    }

如果在浏览器请求http://localhost:8080/echo/你好?a=1&b=哈喽,可以得到返回:

{
    "remote": "::1", 
    "method": "GET", 
    "route": "/echo/{id}", 
    "url": {
        "host": "localhost", 
        "scheme": "http", 
        "path": "/echo/你好", 
        "query_string": "a=1&b=哈喽", 
        "path_qs": "/echo/你好?a=1&b=哈喽", 
        "url": "http://localhost:8080/echo/%E4%BD%A0%E5%A5%BD?a=1&b=%E5%93%88%E5%96%BD"
    }
}

完整API

class Request(BaseRequest):
    @reify
    def remote(self) -> Optional[str]:
        """Remote IP of client initiated HTTP request.

        The IP is resolved in this order:

        - overridden value by .clone(remote=new_remote) call.
        - peername of opened socket
        """
        ...

    @reify
    def method(self) -> str:
        """Read only property for getting HTTP method.

        The value is upper-cased str like 'GET', 'POST', 'PUT' etc.
        """
        ...

    @reify
    def match_info(self) -> "UrlMappingMatchInfo":
        """Result of route resolving."""
        ...

    @reify
    def url(self) -> URL: ...