Postman Chrome: Quelle est la différence entre form-data, x-www-form-urlencoded et raw

222

J'utilise l'extension Postman Chrome pour tester un service Web.

Trois options sont disponibles pour la saisie de données.

Je suppose que rawc'est pour envoyer du JSON.

Quelle est la différence entre les deux autres form-dataet x-www-form-urlencoded?

Rohan
la source
11
À ce jour, il existe également une quatrième option pour publier des données dans l'outil Postman - binary.
RBT

Réponses:

237

Il s'agit de différents types de contenu de formulaire définis par le W3C. Si vous souhaitez envoyer des données texte / ASCII simples, alors x-www-form-urlencoded fonctionnera. C'est la valeur par défaut.

Mais si vous devez envoyer du texte non ASCII ou des données binaires volumineuses, les données de formulaire sont pour cela.

Vous pouvez utiliser Raw si vous souhaitez envoyer du texte brut ou du JSON ou tout autre type de chaîne. Comme son nom l'indique, Postman envoie vos données de chaîne brutes telles quelles sans modifications. Le type de données que vous envoyez peut être défini à l'aide de l'en-tête de type de contenu dans la liste déroulante.

Le binaire peut être utilisé lorsque vous souhaitez joindre des données non textuelles à la demande, par exemple un fichier vidéo / audio, des images ou tout autre fichier de données binaires.

Reportez-vous à ce lien pour en savoir plus: Formulaires dans les documents HTML

Basant Singh
la source
qu'en est-il du binaire?
RBT
j'ai un formulaire qui a 4 champs de texte et 1 champ de téléchargement de fichier maintenant veuillez me suggérer quelle option (formulaire-données Ou x-www-formulaire-urlencoded) sera utilisée pour soumettre la valeur de ces 5 champs dans postman? Merci d'avance.
Kamlesh
@Kamlesh, désolé pour la réponse tardive, le champ clé des données de formulaire dans Postman a une liste déroulante où vous pouvez sélectionner s'il s'agit d'un champ de texte ou d'un fichier. Vous pouvez le définir sur fichier, puis parcourir un fichier à attacher au corps. J'espère que cela pourra aider.
Basant Singh
87

Cela explique mieux: les documents Postman

Organe de demande

Lors de la construction des demandes, vous auriez beaucoup à faire avec l'éditeur de corps de demande. Postman vous permet d'envoyer presque n'importe quel type de demande HTTP (si vous ne pouvez pas envoyer quelque chose, faites-le nous savoir!). L'éditeur de corps est divisé en 4 zones et dispose de différents contrôles selon le type de corps.

Données de formulaire

multipart / form-data est l'encodage par défaut utilisé par un formulaire Web pour transférer des données. Cela simule le remplissage d'un formulaire sur un site Web et sa soumission. L'éditeur de données de formulaire vous permet de définir des paires clé / valeur (à l'aide de l'éditeur de valeur-clé) pour vos données. Vous pouvez également joindre des fichiers à une clé. Veuillez noter qu'en raison des restrictions de la spécification HTML5, les fichiers ne sont pas stockés dans l'historique ou les collections. Vous devrez sélectionner à nouveau le fichier au moment de l'envoi d'une demande.

urlencoded

Cet encodage est le même que celui utilisé dans les paramètres d'URL. Il vous suffit de saisir des paires clé / valeur et Postman encodera correctement les clés et les valeurs. Notez que vous ne pouvez pas télécharger de fichiers via ce mode d'encodage. Il peut y avoir une certaine confusion entre les données de formulaire et celles encodées en url.

brut

Une requête brute peut contenir n'importe quoi. Postman ne touche pas la chaîne entrée dans l'éditeur brut, à l'exception du remplacement des variables d'environnement. Tout ce que vous mettez dans la zone de texte est envoyé avec la demande. L'éditeur brut vous permet de définir le type de mise en forme ainsi que l'en-tête correct que vous devez envoyer avec le corps brut. Vous pouvez également définir manuellement l'en-tête Content-Type. Normalement, vous enverriez des données XML ou JSON ici.

binaire

les données binaires vous permettent d'envoyer des choses que vous ne pouvez pas entrer dans Postman. Par exemple, des fichiers image, audio ou vidéo. Vous pouvez également envoyer des fichiers texte. Comme mentionné précédemment dans la section des données du formulaire, vous devrez rattacher un fichier si vous chargez une demande via l'historique ou la collection.

METTRE À JOUR

Comme l'a souligné VKK , la spécification WHATWG indique que l'urlencoded est le type de codage par défaut pour les formulaires.

La valeur non valide par défaut pour ces attributs est l'état application / x-www-form-urlencoded. La valeur manquante par défaut pour l'attribut enctype est également l'état application / x-www-form-urlencoded.

avck
la source
5
Le doc du facteur est faux. La spécification HTML5 de WHATWG disponible sur html.spec.whatwg.org/multipage/… définit clairement une valeur par défaut "application / x-www-form-urlencoded" pour l'attribut enctype de l'élément de formulaire. En d'autres termes, "application / x-www-form-urlencoded" est le codage par défaut (en termes HTTP Content-Type) qu'un formulaire Web utilise pour transférer des données, et non des parties / données de formulaire. Pour envoyer une demande de publication HTTP lors de la soumission d'un formulaire avec un type de contenu multipart / form-data, il faut explicitement le spécifier comme valeur enctype.
VKK
Quelle est donc la différence entre les données de formulaire (entrées avec des paires clé-valeur dans l'interface utilisateur de Postman) envoyées avec l'en- Content-Type: application/jsontête; et les données brutes entrées comme json comme {foo: bar}avec le même en- Content-Type: application/jsontête?
Inigo
Avec des données de formulaire comme paires de valeurs clés, le type de contenu est des données de formulaire en plusieurs parties même lorsque vous spécifiez les en-têtes et avec le type de contenu brut sera du texte ou tout ce que vous avez spécifié dans les en-têtes.
16h16
20

multipart / form-data

Remarque. Veuillez consulter la RFC2388 pour plus d'informations sur les téléchargements de fichiers, y compris les problèmes de compatibilité ascendante, la relation entre les "multipart / form-data" et d'autres types de contenu, les problèmes de performances, etc.

Veuillez consulter l'annexe pour plus d'informations sur les problèmes de sécurité des formulaires.

Le type de contenu "application / x-www-form-urlencoded" est inefficace pour envoyer de grandes quantités de données binaires ou de texte contenant des caractères non ASCII. Le type de contenu "multipart / form-data" doit être utilisé pour soumettre des formulaires contenant des fichiers, des données non ASCII et des données binaires.

Le type de contenu "multipart / form-data" suit les règles de tous les flux de données MIME multipart comme indiqué dans la RFC2045 . La définition de "multipart / form-data" est disponible dans le registre [IANA].

Un message "multipart / form-data" contient une série de parties, chacune représentant un contrôle réussi. Les pièces sont envoyées à l'agent de traitement dans le même ordre que les contrôles correspondants apparaissent dans le flux de documents. Les limites des pièces ne doivent apparaître dans aucune des données; comment cela est fait sort du cadre de cette spécification.

Comme avec tous les types MIME en plusieurs parties, chaque partie a un en-tête "Content-Type" facultatif qui est par défaut "text / plain". Les agents utilisateurs doivent fournir l'en-tête "Content-Type", accompagné d'un paramètre "charset".

application / x-www-form-urlencoded

Il s'agit du type de contenu par défaut. Les formulaires soumis avec ce type de contenu doivent être codés comme suit:

Les noms et valeurs de contrôle sont échappés. Les caractères d'espace sont remplacés par +', and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by% HH ', un signe de pourcentage et deux chiffres hexadécimaux représentant le code ASCII du caractère. Les sauts de ligne sont représentés par des paires "CR LF" (c'est-à-dire que %0D%0A'). The control names/values are listed in the order they appear in the document. The name is separated from the value by= 'et les paires nom / valeur sont séparés les uns des autres par "&".

application/x-www-form-urlencodedle corps du message HTTP envoyé au serveur est essentiellement une chaîne de requête géante - les paires nom / valeur sont séparées par l'esperluette (&), et les noms sont séparés des valeurs par le symbole égal (=). Un exemple de ceci serait:

MyVariableOne=ValueOne&MyVariableTwo=ValueTwo

Le type de contenu "application / x-www-form-urlencoded" est inefficace pour envoyer de grandes quantités de données binaires ou de texte contenant des caractères non ASCII. Le type de contenu "multipart / form-data" doit être utilisé pour soumettre des formulaires contenant des fichiers, des données non ASCII et des données binaires.

Mohideen bin Mohammed
la source
15

Voici quelques exemples supplémentaires pour voir le texte brut que Postman transmet dans la demande. Vous pouvez le voir en ouvrant la console Postman:

entrez la description de l'image ici

Données de formulaire

Entête

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

Corps

key1=value1key2=value2

x-www-form-urlencoded

Entête

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

Corps

key1=value1&key2=value2

Texte brut / brut

Entête

Content-Type: text/plain

Corps

This is some text.

Json brut

Entête

Content-Type: application/json

Corps

{"key1":"value1","key2":"value2"}
Suragch
la source