# 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 {#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](https://proxyman.com/docs/es/advanced-features/websocket#websocket-with-protobuf-payload)

![Proxyman muestra el cuerpo de una solicitud Protobuf sin procesar junto al mismo cuerpo decodificado como JSON](https://proxyman.com/docs/assets/Screen_Shot_2020-04-25_at_21_32_54.png)

## 2. Descriptor de archivo de Protobuf (\*.desc) {#2-protobuf-file-descriptor-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. {#1-ask-your-colleagues}

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 {#2-generate-from-proto-file}

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

```bash
# 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**

> **Nota:** 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](#2-generate-from-proto-file) más arriba.

> **Nota:** 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](https://developers.google.com/protocol-buffers/docs/proto3)

## 3. Configuración de Protobuf {#3-protobuf-config}

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:

| Nombre                              | Descripción                                                                                                                                                                              |
| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Schema                              | Añade un archivo `.desc` si es necesario                                                                                                                                                 |
| Message Type                        | Nombre de la clase del objeto raíz en el binario de Protobuf. **Debe incluir el nombre del paquete**                                                                                     |
| Payload Type: **Auto**              | Detecta automáticamente si el binario de Protobuf está codificado como un [mensaje delimitado](https://developers.google.com/protocol-buffers/docs/techniques#streaming) o como un mensaje único |
| Payload Type: **Single Message**    | Mensaje único en un binario de Protobuf                                                                                                                                                  |
| Payload Type: **Delimited List**    | Varios 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](https://proxyman.com/docs/assets/Screenshot%202026-01-31%20at%2010.04.50.png)

_Decodificar una respuesta HTTPS de Protobuf con Proxyman_

## 4. Cómo usarlo {#4-how-to-use}

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 {#41-define-protobuf-rule}

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](https://proxyman.com/docs/assets/Screen_Shot_2020-04-25_at_21_56_19.png)

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).

> **Nota:** 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 {#42-read-from-content-type-header}

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) {#5--protobuf-with-websocket-from-macos-650-or-later}

* Decodifica un único frame binario de WebSocket: consulta [websocket.md](https://proxyman.com/docs/es/advanced-features/websocket)
* 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-troubleshooting}

### 6.1 Faltan algunos campos con nombre {#61-some-name-fields-are-missing}

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 {#learn-more}

* [Cómo capturar mensajes WebSocket y decodificar mensajes de Protobuf](https://proxyman.com/posts/how-to-capture-websocket-with-protobuf-message)
* [Proxyman vs mitmproxy: decodificar mensajes WebSocket de Protobuf](https://proxyman.com/posts/2026-07-21-Proxyman-vs-mitmproxy-Protobuf-WebSocket)
