Postman Chrome: qual é a diferença entre formulário-dados, x-www-formulário-url e codificado


222

Estou usando a extensão Postman Chrome para testar um serviço da web.

Existem três opções disponíveis para entrada de dados.

Eu acho que o rawé para o envio de JSON.

Qual é a diferença entre os outros dois form-datae x-www-form-urlencoded?


11
A partir de hoje, existe uma quarta opção também para publicar dados na ferramenta carteiro - binary.
RBT 30/11

Respostas:


237

Esses são os diferentes tipos de conteúdo de formulário definidos pelo W3C. Se você deseja enviar dados de texto / ASCII simples, o x-www-form-urlencoded funcionará. Esse é o padrão.

Mas se você tiver que enviar texto não ASCII ou dados binários grandes, os dados do formulário são para isso.

Você pode usar o Raw se desejar enviar texto sem formatação, JSON ou qualquer outro tipo de string. Como o nome sugere, o Postman envia seus dados brutos de string, sem modificações. O tipo de dados que você está enviando pode ser definido usando o cabeçalho do tipo de conteúdo na lista suspensa.

O binário pode ser usado quando você deseja anexar dados não textuais à solicitação, por exemplo, um arquivo de vídeo / áudio, imagens ou qualquer outro arquivo de dados binários.

Consulte este link para obter mais informações: Formulários em documentos HTML


e o binário?
RBT 30/11

Eu tenho um formulário que possui 4 campos de texto e 1 campo de upload de arquivos agora. Por favor, sugira qual opção (dados do formulário ou x-www-form-urlencoded) será usada para enviar o valor desses 5 campos no carteiro? Desde já, obrigado.
Kamlesh

@Kamlesh, desculpe pela resposta tardia, o campo-chave dos dados do formulário no Postman tem uma lista suspensa onde é possível selecionar se é um campo ou arquivo de texto. Você pode configurá-lo para arquivar e procurar um arquivo para anexar ao corpo. Espero que ajude.
Basant Singh

87

Isso explica melhor: documentos do Postman

Organismo de solicitação

Ao construir solicitações, você lidaria muito com o editor do corpo da solicitação. O Postman permite enviar quase qualquer tipo de solicitação HTTP (se você não puder enviar algo, avise-nos!). O editor do corpo é dividido em 4 áreas e possui controles diferentes, dependendo do tipo de corpo.

dados do formulário

multipart / form-data é a codificação padrão que um formulário da web usa para transferir dados. Isso simula o preenchimento de um formulário em um site e o envio. O editor de dados do formulário permite definir pares de chave / valor (usando o editor de valor da chave) para seus dados. Você também pode anexar arquivos a uma chave. Observe que, devido a restrições da especificação HTML5, os arquivos não são armazenados no histórico ou nas coleções. Você precisaria selecionar o arquivo novamente no momento do envio de uma solicitação.

codificado por url

Essa codificação é igual à usada nos parâmetros de URL. Você só precisa inserir pares de chave / valor e o Postman codificará as chaves e os valores corretamente. Observe que você não pode carregar arquivos através deste modo de codificação. Pode haver alguma confusão entre os dados do formulário e o código da URL, portanto, verifique primeiro sua API.

cru

Uma solicitação bruta pode conter qualquer coisa. O Postman não toca na sequência inserida no editor bruto, exceto substituindo as variáveis ​​de ambiente. Tudo o que você coloca na área de texto é enviado com a solicitação. O editor bruto permite definir o tipo de formatação junto com o cabeçalho correto que você deve enviar com o corpo bruto. Você também pode definir o cabeçalho do tipo de conteúdo manualmente. Normalmente, você enviaria dados XML ou JSON aqui.

binário

dados binários permitem enviar coisas que você não pode inserir no Postman. Por exemplo, arquivos de imagem, áudio ou vídeo. Você também pode enviar arquivos de texto. Conforme mencionado anteriormente na seção de dados do formulário, você precisaria anexar novamente um arquivo se estiver carregando uma solicitação através do histórico ou da coleção.

ATUALIZAR

Conforme apontado por VKK , a especificação WHATWG diz que urlencoded é o tipo de codificação padrão para formulários.

O valor inválido padrão para esses atributos é o estado application / x-www-form-urlencoded. O valor padrão ausente para o atributo enctype também é o estado application / x-www-form-urlencoded.


5
O documento Postman está errado. A especificação HTML5 do WHATWG disponível em html.spec.whatwg.org/multipage/… define claramente um valor padrão de "application / x-www-form-urlencoded" para o atributo enctype do elemento de formulário. Em outras palavras, "application / x-www-form-urlencoded" é a codificação padrão (nos termos HTTP Tipo de Conteúdo) que um formulário da Web usa para transferir dados, não multipart / form-data. Para enviar uma solicitação de postagem HTTP no envio de formulários com um Tipo de conteúdo multipart / form-data, é necessário especificar explicitamente isso como o valor enctype.
VKK

Então, qual é a diferença entre dados de formulário (inseridos com pares de valores-chave na interface do usuário do Postman) enviados com o Content-Type: application/jsoncabeçalho; e dados brutos inseridos como json como {foo: bar}com o mesmo Content-Type: application/jsoncabeçalho?
Inigo

Com os dados do formulário como pares de valores-chave, o tipo de conteúdo é multipartes, mesmo quando você especifica os cabeçalhos e, com o tipo de conteúdo bruto, o texto ou o que você especificou nos cabeçalhos.
avck 14/08/18

20

multipart / form-data

Nota. Consulte o RFC2388 para obter informações adicionais sobre uploads de arquivos, incluindo problemas de compatibilidade com versões anteriores, o relacionamento entre "dados de várias partes / dados do formulário" e outros tipos de conteúdo, problemas de desempenho etc.

Consulte o apêndice para obter informações sobre questões de segurança para formulários.

O tipo de conteúdo "application / x-www-form-urlencoded" é ineficiente para enviar grandes quantidades de dados binários ou texto contendo caracteres não ASCII. O tipo de conteúdo "dados de várias partes / formulário" deve ser usado para enviar formulários que contêm arquivos, dados não ASCII e dados binários.

O tipo de conteúdo "multipart / form-data" segue as regras de todos os fluxos de dados MIME de várias partes, conforme descrito no RFC2045 . A definição de "multipart / form-data" está disponível no registro [IANA].

Uma mensagem "multipart / form-data" contém uma série de partes, cada uma representando um controle bem-sucedido. As peças são enviadas ao agente de processamento na mesma ordem em que os controles correspondentes aparecem no fluxo de documentos. Os limites das peças não devem ocorrer em nenhum dos dados; como isso é feito está fora do escopo desta especificação.

Como em todos os tipos MIME de várias partes, cada parte possui um cabeçalho "Content-Type" opcional que padroniza como "text / plain". Os agentes do usuário devem fornecer o cabeçalho "Content-Type", acompanhado por um parâmetro "charset".

application / x-www-form-urlencoded

Este é o tipo de conteúdo padrão. Os formulários enviados com este tipo de conteúdo devem ser codificados da seguinte maneira:

Os nomes e valores de controle são escapados. Os caracteres de espaço são substituídos por +', and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by% HH ', um sinal de porcentagem e dois dígitos hexadecimais que representam o código ASCII do caractere. As quebras de linha são representadas como pares "CR LF" (ou seja, %0D%0A'). The control names/values are listed in the order they appear in the document. The name is separated from the value by= 'e pares nome / valor são separados um do outro por `e'.

application/x-www-form-urlencodedo corpo da mensagem HTTP enviada ao servidor é essencialmente uma string de consulta gigante - os pares nome / valor são separados pelo e comercial (&) e os nomes são separados dos valores pelo símbolo de igual (=). Um exemplo disso seria:

MyVariableOne=ValueOne&MyVariableTwo=ValueTwo

O tipo de conteúdo "application / x-www-form-urlencoded" é ineficiente para enviar grandes quantidades de dados binários ou texto contendo caracteres não ASCII. O tipo de conteúdo "dados de várias partes / formulário" deve ser usado para enviar formulários que contêm arquivos, dados não ASCII e dados binários.


15

Aqui estão alguns exemplos adicionais para ver o texto bruto que Postman passa na solicitação. Você pode ver isso abrindo o console do Postman:

insira a descrição da imagem aqui

dados do formulário

Cabeçalho

content-type: multipart/form-data; boundary=--------------------------590299136414163472038474

Corpo

key1=value1key2=value2

x-www-form-urlencoded

Cabeçalho

Content-Type: application/x-www-form-urlencoded

Corpo

key1=value1&key2=value2

Texto bruto / sem formatação

Cabeçalho

Content-Type: text/plain

Corpo

This is some text.

Raw json

Cabeçalho

Content-Type: application/json

Corpo

{"key1":"value1","key2":"value2"}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.