Protobuf
From Protobuf's Google, Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler.
You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages.
Proxyamn is capable of reading a Protobuf Binary and parsing to JSON Format with given Protobuf File Descriptors.

Parse protobuf request with File Descriptor
Proxyman requires File Descriptor (*.desc) to properly parse the Protobuf Data.
There are various ways to get the File Descriptor:
If your company is using Protobuf, it's a high chance that your colleagues have already had this file, especially the Backend and Frontend teams.
It might be one or multiple descriptor files.
If you have a bunch of *.proto files, you can simply generate 1 single *.desc file by using the following command line.
# 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
Once you have the Descriptor File, you can import them to Proxyman:
- Proxyman -> Tools Menu -> Protobuf Schema
- Click on the + button and select the output.desc file
Proxyman 3.6.0+ only accepts File Descriptor (*.desc) for better Protobuf parsing.
If you have *.proto files, you can convert them to *.desc. Please check out the next section.
Proxyman automatically imports all common types from Google Protobuf, such as Timestamp, Struct, Value, Enum, Method, etc.
Before using Protobuf, you have to config which Message Type should be used to parse the Protobuf data.
The following table describes which config are:
Name | Description |
---|---|
Schema | Add .desc file if need |
Message Type | The Class name of the root object in Protobuf binary. Must include Package name |
Payload Type: Auto | |
Payload Type: Single Message | Single Mesage in a Protobuf Binary |
Payload Type: Delimited Message | Multiple Messages in a Protobuf Binary (Length-Prefix) |

Add Message Type to particular requests
There are two ways to parse Protobuf properly with qualified name fields:
- Define Protobuf Rules
- Read from Content-Type Header
- 1.Make a request, which has
Content-Type: application/x-protobuf
orContent-Type: application/protobuf
- 2.You can see the Warning that Proxyman couldn't parse properly due to the absence of Message Type. Click Add to open Protobuf Settings

Missing Message Type
3. Add Schema and fill Message type and Payload Type:
- Right Click on the Protobuf Request -> Tools -> Protobuf
- Select which Message Type for this request (Add Desc file if need)

4. Click Add and see qualified JSON Format

You can dynamically provide the Protobuf Config from
Content-Type
For example: Your
Content-Type
in the Request or Response might look like:Content-Type: application/x-protobuf; messageType="tutorial.Address"; delimited=true
Content-Type: application/x-protobuf; messageType="com.proxyman.User"; delimited=false
To specify that the Protobuf Body this MessageType and the payload encoding.
There is a situation where some field names are absent because the field name definition is not included in your Protobuf File Descriptor. It might be your descriptor is out of date.
Solution:
- Remove old Protobuf Schema and Add the latest descriptor file from your server.
- If you're using Proxyman 3.5.2 and older, please update to Proxyman 3.6.0 or later. Then, use File Descriptor (*.desc) for better results.
Last modified 1yr ago