Saltar al contenido principal

Protobuf

Decodifica solicitudes, respuestas y mensajes WebSocket HTTP y HTTPS de Protobuf en Proxyman con un descriptor de archivo .desc y una regla de Message Type.

1. Protobuf​

  • Proxyman para macOS puede decodificar el cuerpo Protobuf de tus solicitudes y respuestas HTTP/HTTPS con un archivo desc concreto
  • Decodifica binarios de Protobuf y los muestra como texto sin formato
  • Admite un único mensaje o varios mensajes delimitados en un mismo binario de Protobuf
  • Importa un archivo desc y consulta todos sus Message Types para decodificar binarios de Protobuf
  • Decodifica Protobuf en WebSocket
Proxyman muestra el cuerpo de una solicitud Protobuf sin procesar junto al mismo cuerpo decodificado como JSON

2. Descriptor de archivo de Protobuf (*.desc)​

Proxyman necesita un descriptor de archivo (*.desc) para analizar correctamente los datos de Protobuf.

Hay varias formas de obtener el descriptor de archivo:

1. Pregunta a tus compañeros.​

Si tu empresa usa Protobuf, es muy probable que tus compañeros ya tengan este archivo, sobre todo los equipos de backend y frontend.

Puede tratarse de uno o de varios archivos descriptor.

2. Generar a partir de un archivo *.proto​

Si tienes muchos archivos *.proto, puedes generar un único archivo *.desc con el siguiente comando.

# Install protobuf cli if need
brew install protobuf

# Create `input` folder on the Desktop
# Copy all proto files to the `input` folder

# Generate 1 descriptor file with multiple proto files
protoc --descriptor_set_out=output.desc --include_imports -I=/Users/<your_name>/Desktop/input /Users/<your_name>/Desktop/input/*.proto

# Done
# output.desc

Una vez tengas el archivo descriptor, impórtalo en Proxyman:

  • Menú Tools -> Protobuf… -> haz clic en el botón Protobuf Schema...
  • Haz clic en el botón + y selecciona el archivo output.desc
información

Desde Proxyman 3.6.0, solo se aceptan descriptores de archivo (*.desc) para un análisis de Protobuf más preciso.

Si tienes archivos *.proto, puedes convertirlos a *.desc. Consulta Generar a partir de un archivo *.proto más arriba.

información

Proxyman importa automáticamente todos los tipos comunes de Google Protobuf, como Timestamp, Struct, Value, Enum, Method, etc.

Proxyman admite las sintaxis proto2 y proto3. Más información

3. Configuración de Protobuf​

Antes de usar Protobuf, debes indicar qué Message Type debe usar Proxyman para analizar los datos de Protobuf.

En la siguiente tabla se describen los ajustes:

NombreDescripción
SchemaAñade un archivo .desc si es necesario
Message TypeNombre de la clase del objeto raíz en el binario de Protobuf. Debe incluir el nombre del paquete
Payload Type: AutoDetecta automáticamente si el binario de Protobuf está codificado como un mensaje delimitado o como un mensaje único
Payload Type: Single MessageMensaje único en un binario de Protobuf
Payload Type: Delimited ListVarios mensajes en un binario de Protobuf (con prefijo de longitud)
Ajustes de Protobuf en Proxyman con una regla de coincidencia y las opciones Add Schema, Message Type y Payload Type

Decodificar una respuesta HTTPS de Protobuf con Proxyman

4. Cómo usarlo​

Hay dos formas de analizar correctamente Protobuf con campos con nombre:

  • Definir una regla de Protobuf
  • Leer desde el encabezado Content-Type

4.1 Definir una regla de Protobuf​

  1. La solicitud de Protobuf debe tener un encabezado Content-Type: Content-Type: application/x-protobuf o Content-Type: application/protobuf
  2. Proxyman detecta la carga de Protobuf y muestra una advertencia indicando que no puede analizarla correctamente porque falta el tipo de mensaje. Haz clic en Add para abrir Protobuf Settings.

También puedes hacer clic con el botón derecho en la solicitud -> Tools -> Protobuf…

Cuerpo de solicitud Protobuf en Proxyman con una advertencia de Missing Message Type, un botón Add y campos numerados sin nombre

3. En la ventana de la regla de Protobuf, selecciona el Message Type de esta solicitud o respuesta (añade un archivo desc si es necesario).

información

Si la solicitud y la respuesta usan Message Types de Protobuf distintos, marca la casilla `Use different Message Type for Request / Response`.

4. Haz clic en Add y consulta el cuerpo en formato JSON.

4.2 Leer desde el encabezado Content-Type​

Puedes proporcionar la configuración de Protobuf de forma dinámica a partir de Content-Type.

Por ejemplo, el Content-Type de la solicitud o de la respuesta podría tener este aspecto:

Content-Type: application/x-protobuf; messageType="tutorial.Address"; delimited=true

Content-Type: application/x-protobuf; messageType="com.proxyman.User"; delimited=false

Así, Proxyman conoce el Message Type y la codificación de la carga útil del cuerpo de Protobuf.

5. ✅ Protobuf con WebSocket (desde macOS 6.5.0 o posterior)​

  • Decodifica un único frame binario de WebSocket: consulta websocket.md
  • Puedes crear una regla de Protobuf para WebSocket. Usa el Message Type de la solicitud para los mensajes del cliente y el Message Type de la respuesta para los mensajes del servidor.

6. Solución de problemas​

6.1 Faltan algunos campos con nombre​

Algunos nombres de campo pueden faltar cuando sus definiciones no están en tu descriptor de archivo de Protobuf. Es posible que tu descriptor esté desactualizado.

Solución:

  • Elimina el Protobuf Schema antiguo y añade el archivo descriptor más reciente de tu servidor.
  • Si usas Proxyman 3.5.2 o una versión anterior, actualiza a Proxyman 3.6.0 o posterior. Después, usa el archivo descriptor (*.desc) para obtener mejores resultados.

Más información​