es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo recuperar los datos del formulario del objeto de solicitud de Playwright?

Estoy añadiendo un controlador de ruta personalizado a una página de Playwright y estoy intentando inspeccionar la solicitud pasada al controlador. Para contextualizar, aquí hay un fragmento de código siguiente:

def handler(route: Route, request: Request):
    # Hacer cosas con <code>request</code>
    ...

<p>await page.route('<em>*/</em>', handler=handler)

Para las solicitudes de POST/PUT con un Content-Type de application/json, he podido inspeccionar correctamente la carga útil utilizando request.post_data_buffer. Sin embargo, cuando el Content-Type es multipart/form-data, no he podido encontrar dónde puedo obtener los datos del formulario. Todas las propiedades post_data, post_data_buffer y post_data_json tienen un valor de None, y no pude encontrar nada más en la documentación que pudiera contener los form_data.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para recuperar datos de formulario de una solicitud POST o PUT multipart/form-data en un controlador de ruta de página de Playwright, se puede usar el módulo FormData en Python. Aquí está un fragmento de código para mostrar cómo hacerlo:

    from aiohttp import FormData
    
    async def handler(route: Route, request: Request):
        if request.headers.get("content-type") == "multipart/form-data":
            post_data = await request.post()
            form_data = FormData()
    
            for field_name in post_data:
                field_value = post_data[field_name]
                form_data.add_field(field_name, field_value)
    
            # Hacer cosas con `form_data`
            ...
        else:
            # Hacer cosas con `request.post_data_buffer` para solicitudes `application/json`
            ...
    
    await page.route('**/*', handler=handler)
    

    En este fragmento de código, primero verificamos si el encabezado content-type de la solicitud es multipart/form-data. Si es así, luego recuperamos los datos de la publicación usando request.post(), que devuelve un objeto similar a un diccionario que contiene listas de valores para cada campo de formulario.

    Luego creamos un nuevo objeto FormData e iteramos sobre cada campo en el diccionario de datos de publicación, agregando cada campo al objeto FormData usando el método add_field(). Finalmente, podemos usar el objeto form_data para acceder a los datos del formulario y realizar cualquier procesamiento necesario.

    Tenga en cuenta que estamos usando el módulo aiohttp para manejar el análisis multipart/form-data. Si no está utilizando aiohttp, es posible que necesite usar un método diferente para analizar los datos del formulario.

Comments are closed.