Postman Chrome: qual è la differenza tra form-data, x-www-form-urlencoded e raw


222

Sto usando l'estensione Postman per Chrome per testare un servizio web.

Sono disponibili tre opzioni per l'immissione dei dati.

Immagino rawsia per l'invio di JSON.

Qual è la differenza tra gli altri due form-datae x-www-form-urlencoded?


11
Ad oggi esiste anche una quarta opzione per pubblicare i dati nello strumento postino - binary.
RBT

Risposte:


237

Questi sono diversi tipi di contenuto del modulo definiti da W3C. Se vuoi inviare semplici dati di testo / ASCII, allora x-www-form-urlencoded funzionerà. Questo è il valore predefinito.

Ma se devi inviare testo non ASCII o dati binari di grandi dimensioni, i dati del modulo sono per questo.

È possibile utilizzare Raw se si desidera inviare testo normale o JSON o qualsiasi altro tipo di stringa. Come suggerisce il nome, Postman invia i tuoi dati di stringa grezzi così come sono senza modifiche. Il tipo di dati che stai inviando può essere impostato usando l'intestazione del tipo di contenuto dal menu a discesa.

Binary può essere utilizzato quando si desidera allegare dati non testuali alla richiesta, ad esempio un file video / audio, immagini o qualsiasi altro file di dati binari.

Fare riferimento a questo collegamento per ulteriori letture: moduli nei documenti HTML


che dire binario?
RBT

ho un modulo che ha 4 campi di testo e 1 campo di upload di file ora per favore suggeriscimi quale opzione (form-data o x-www-form-urlencoded) sarà usata per inviare questi 5 campi in postino? Grazie in anticipo.
Kamlesh,

@Kamlesh, scusate la risposta tardiva, il campo chiave del modulo-dati in Postman ha un menu a discesa in cui è possibile selezionare se si tratta di un campo di testo o file. È possibile impostarlo su file e quindi sfogliare un file da allegare al corpo. Spero che aiuti.
Basant Singh,

87

Questo spiega meglio: documenti postino

Corpo della richiesta

Mentre costruisci le richieste, dovresti occuparti molto dell'editor del corpo della richiesta. Postman ti consente di inviare quasi ogni tipo di richiesta HTTP (se non riesci a inviare qualcosa, faccelo sapere!). L'editor del corpo è diviso in 4 aree e ha diversi controlli a seconda del tipo di corpo.

form-data

multipart / form-data è la codifica predefinita utilizzata da un modulo Web per trasferire i dati. Questo simula la compilazione di un modulo su un sito Web e l'invio. L'editor modulo-dati ti consente di impostare coppie chiave / valore (usando l'editor di valori-chiave) per i tuoi dati. Puoi anche allegare file a una chiave. Si noti che a causa delle restrizioni delle specifiche HTML5, i file non vengono archiviati nella cronologia o nelle raccolte. Dovresti selezionare nuovamente il file al momento dell'invio di una richiesta.

urlencoded

Questa codifica è uguale a quella utilizzata nei parametri URL. Devi solo inserire le coppie chiave / valore e Postman codificherà correttamente le chiavi e i valori. Si noti che non è possibile caricare file tramite questa modalità di codifica. Potrebbe esserci un po 'di confusione tra i dati del modulo e quelli codificati in url, quindi assicurati di verificare prima con l'API.

crudo

Una richiesta non elaborata può contenere qualsiasi cosa. Postman non tocca la stringa inserita nell'editor non elaborato tranne la sostituzione delle variabili di ambiente. Qualunque cosa tu metta nell'area di testo viene inviata con la richiesta. L'editor non elaborato consente di impostare il tipo di formattazione insieme all'intestazione corretta che è necessario inviare con il corpo non elaborato. Puoi anche impostare l'intestazione Content-Type manualmente. Normalmente, invieresti dati XML o JSON qui.

binario

i dati binari ti consentono di inviare cose che non puoi inserire in Postman. Ad esempio, file di immagini, audio o video. Puoi anche inviare file di testo. Come accennato in precedenza nella sezione dei dati del modulo, è necessario ricollegare un file se si sta caricando una richiesta attraverso la cronologia o la raccolta.

AGGIORNARE

Come sottolineato da VKK , la specifica WHATWG afferma che urlencoded è il tipo di codifica predefinito per i moduli.

Il valore predefinito non valido per questi attributi è lo stato application / x-www-form-urlencoded. Il valore mancante predefinito per l'attributo enctype è anche lo stato application / x-www-form-urlencoded.


5
Il postino è sbagliato. Le specifiche HTML5 di WHATWG disponibili su html.spec.whatwg.org/multipage/… definiscono chiaramente un valore predefinito di "application / x-www-form-urlencoded" per l'attributo enctype dell'elemento form. In altre parole "application / x-www-form-urlencoded" è la codifica predefinita (in termini HTTP Content-Type) utilizzata da un modulo Web per trasferire dati, non multipart / form-data. Per inviare una richiesta di post HTTP al momento dell'invio del modulo con un Tipo di contenuto di multipart / form-data, è necessario specificarlo esplicitamente come valore del tipo di codifica.
VKK,

Quindi qual è la differenza tra modulo-dati (immesso con coppie chiave-valore nell'interfaccia utente di Postman) inviato con l' Content-Type: application/jsonintestazione; e i dati grezzi inseriti come json come {foo: bar}con la stessa Content-Type: application/jsonintestazione?
Inigo,

Con i form-data come coppie di valori-chiave content-type è form-data multipart anche quando si specificano le intestazioni e con il tipo di contenuto non elaborato sarà testo o qualunque cosa sia stata specificata nelle intestazioni.
avck

20

multipart / form-data

Nota. Consultare RFC2388 per ulteriori informazioni sui caricamenti di file, inclusi problemi di compatibilità con le versioni precedenti, la relazione tra "dati multipart / modulo" e altri tipi di contenuto, problemi di prestazioni, ecc.

Consultare l'appendice per informazioni sui problemi di sicurezza dei moduli.

Il tipo di contenuto "application / x-www-form-urlencoded" non è efficace per l'invio di grandi quantità di dati binari o testo contenente caratteri non ASCII. Il tipo di contenuto "multipart / form-data" deve essere utilizzato per l'invio di moduli che contengono file, dati non ASCII e dati binari.

Il tipo di contenuto "multipart / form-data" segue le regole di tutti i flussi di dati MIME multipart come indicato in RFC2045 . La definizione di "multipart / form-data" è disponibile nel registro [IANA].

Un messaggio "multipart / form-data" contiene una serie di parti, ognuna delle quali rappresenta un controllo riuscito. Le parti vengono inviate all'agente di elaborazione nello stesso ordine in cui i controlli corrispondenti vengono visualizzati nel flusso di documenti. I limiti delle parti non devono verificarsi in nessuno dei dati; come ciò avvenga non rientra nell'ambito di questa specifica.

Come per tutti i tipi MIME multipart, ogni parte ha un'intestazione "Content-Type" opzionale che per impostazione predefinita è "text / plain". Gli interpreti devono fornire l'intestazione "Content-Type", accompagnata da un parametro "charset".

application / x-www-form-urlencoded

Questo è il tipo di contenuto predefinito. I moduli inviati con questo tipo di contenuto devono essere codificati come segue:

I nomi e i valori di controllo sono sottoposti a escape. I caratteri spaziali sono sostituiti da +', and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by% HH ', un segno di percentuale e due cifre esadecimali che rappresentano il codice ASCII del carattere. Le interruzioni di riga sono rappresentate come coppie "CR LF" (ovvero, le %0D%0A'). The control names/values are listed in the order they appear in the document. The name is separated from the value bycoppie nome / valore sono separate l'una dall'altra da `& '.

application/x-www-form-urlencodedil corpo del messaggio HTTP inviato al server è essenzialmente una stringa di query gigante: le coppie nome / valore sono separate dalla e commerciale (&) e i nomi sono separati dai valori dal simbolo uguale (=). Un esempio di questo sarebbe:

MyVariableOne=ValueOne&MyVariableTwo=ValueTwo

Il tipo di contenuto "application / x-www-form-urlencoded" non è efficace per l'invio di grandi quantità di dati binari o testo contenente caratteri non ASCII. Il tipo di contenuto "multipart / form-data" deve essere utilizzato per l'invio di moduli che contengono file, dati non ASCII e dati binari.


15

Ecco alcuni esempi supplementari per vedere il testo non elaborato che Postman passa nella richiesta. Puoi vederlo aprendo la console di Postman:

inserisci qui la descrizione dell'immagine

form-data

Intestazione

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

Corpo

key1=value1key2=value2

x-www-form-urlencoded

Intestazione

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

Corpo

key1=value1&key2=value2

Testo grezzo / semplice

Intestazione

Content-Type: text/plain

Corpo

This is some text.

Json crudo

Intestazione

Content-Type: application/json

Corpo

{"key1":"value1","key2":"value2"}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.