Тело СООБЩЕНИЯ для входа в систему Cherrypy

#python #logging #cherrypy

Вопрос:

Я использую регистратор cherrypy по умолчанию. Я регистрирую каждый запрос на доступ к своему серверу. Для запроса на получение у меня есть полная информация, например

 127.0.0.1 - - [06/Jul/2021:16:10:28] "GET /test/?contract_id=228322 HTTP/1.0" 200 33
 

Но для запроса POST я не могу регистрировать параметры или тело запроса.

 127.0.0.1 - - [06/Jul/2021:13:21:03] "POST /test HTTP/1.0" 201 169
 

Итак, как я могу зарегистрировать тело запроса POST?

Комментарии:

1. В дополнение к предыдущему ответу: агент пользователя может быть пустым. И вы можете случайно вызвать ошибку ключа

Ответ №1:

Вы можете создать такой инструмент, как

 def response_logging():
    cherrypy.log.access_log.info(
        '[{time}] {ip} "{user_agent}" {request_line} "{query_params}" "{body}" "{status}" {response}'.format(
            time=datetime.now().strftime("%d/%m/%Y:%H:%M:%S"),
            ip=cherrypy.request.remote.ip,
            user_agent=cherrypy.request.headers["User-Agent"],
            request_line=cherrypy.request.request_line,
            query_params=cherrypy.request.body.request_params or "",
            body=cherrypy.request.json if hasattr(cherrypy.request, "json") else "",
            status=cherrypy.response.status,
            response=cherrypy.response.body
        )
    )


cherrypy.tools.response_logging = cherrypy.Tool('on_end_request', response_logging)
 

Ответ №2:

 print(cherrypy.request.params) # Prints params on querystring
print(cherrypy.request.headers) # Prints received headers on request
print(cherrypy.request.body) # Prints Body received