Ir para o conteúdo
AZ Tools

Descodificador de Protobuf (sem .proto)

Uma carga protobuf não revela nada por si só. No fio não viajam nomes de campos, apenas números e tipos de wire, por isso um corpo opaco de uma chamada gRPC ou de uma captura de API é ilegível a não ser que tenha o .proto que o gerou — e quando está a depurar o serviço de outra pessoa, normalmente não tem. Este descodificador lê o formato de wire diretamente. Cada campo volta com o seu número, o seu tipo de wire e o seu valor, as mensagens aninhadas são expandidas no lugar e, onde a codificação é ambígua, ele diz isso em vez de escolher por si. Essa ambiguidade é real: um varint pode ser um inteiro sem sinal, um com sinal em ziguezague ou um booleano, e um campo com comprimento pode ser uma cadeia, uma mensagem aninhada, números repetidos packed ou bytes em bruto. A ferramenta mostra a leitura mais provável e lista as outras ao lado. A deteção de mensagens aninhadas não é um palpite sobre o significado: uma sequência de bytes só é proposta como mensagem se for analisada de forma limpa como tal, com cada chave um número de campo válido e cada comprimento a terminar exatamente no fim. Tudo acontece no seu navegador; a carga não é enviada.

Cole uma carga protobuf em base64 ou hex para a descodificar.

Como usar

  1. Cole a carga em base64 ou hex — o formato é detetado e pode forçá-lo.
  2. Leia a árvore: cada linha é o número do campo, o tipo de wire e o valor.
  3. Repare no texto cinzento com as outras leituras possíveis de um valor.
  4. As mensagens aninhadas aparecem indentadas sob o campo que as contém.
  5. Largue um ficheiro binário para descodificar um corpo capturado diretamente.

Perguntas frequentes

Porque não há nomes de campos?
Porque não são transmitidos. O protobuf coloca no fio apenas um número de campo e um tipo de wire; os nomes vivem no ficheiro .proto de ambos os lados. É isso que torna a codificação compacta, e é a razão pela qual um descodificador sem esquema consegue mostrar a forma de uma mensagem mas não como se chamam os seus campos.
Como sabe que um campo contém uma mensagem aninhada?
Tenta analisar os bytes como tal e aceita o resultado apenas se for totalmente consistente: cada chave um número de campo e um tipo de wire válidos, e cada comprimento a acabar exatamente onde acaba o buffer. Cadeias curtas por vezes passam esse teste por acaso, por isso quando os bytes também são texto válido a ferramenta indica que a leitura é ambígua.
Quais são as leituras alternativas de um número?
Um varint pode ser um int32/int64/uint, um sint em ziguezague ou um bool. Um fixed64 pode ser um double, um fixed64 ou um sfixed64. Nada na carga os distingue, por isso mostra-se primeiro a leitura mais comum e as outras ao lado.
Consegue descodificar corpos gRPC?
Uma trama gRPC acrescenta um byte de compressão e quatro de comprimento antes de cada mensagem. Retire esses cinco bytes e o resto descodifica aqui. Tramas comprimidas têm de ser descomprimidas primeiro.
E os grupos?
Os grupos são os tipos de wire 3 e 4, obsoletos desde o proto2, e quase nunca se veem. O descodificador assinala a marca onde a encontra em vez de adivinhar o aninhamento.
A minha carga é enviada?
Não. Os bytes são descodificados no seu navegador e nada é enviado para um servidor.

Ferramentas relacionadas