Quel en-tête HTTP utiliser pour définir les noms de champs de formulaire (multipart / form-data)
-
01-07-2019 - |
Question
Je passe des requêtes HTTP brutes à un serveur Apache (reçu par PHP). La demande est du type multipart / form-data, c’est-à-dire le même type MIME que celui utilisé lors de la soumission de formulaires HTML. Cependant, je ne sais pas quel en-tête HTTP utiliser pour définir le nom du champ de formulaire (je suppose simplement que c'est un en-tête définissant ceci, je ne sais pas quoi d'autre pourrait être cela) qui peut ensuite être utilisé en PHP pour accéder à la champ dans $ _GET ou $ _FILES.
La requête HTTP pourrait ressembler à ceci:
Content-type: multipart/form-data;boundary=main_boundary
--main_boundary
Content-type: text/xml
<?xml version='1.0'?>
<content>
Some content goes here
</content>
--main_boundary
Content-type: multipart/mixed;boundary=sub_boundary
--sub_boundary
Content-type: application/octet-stream
File A contents
--sub_boundary
Content-type: application/octet-stream
File B contents
--sub_boundary
--main_boundary--
La solution
L'en-tête Content-Disposition a un argument de nom qui porte le nom du contrôle. Il devrait y en avoir un après chaque --sub_boundary
--sub_boundary
Content-Disposition: form-data; name="mycontrol"
J'ai failli oublier: si le champ est un contrôle de fichier, il existe également un champ nom de fichier et un en-tête Content-Type
--sub_boundary
Content-Disposition: form-data; name="mycontrol"; filename="file1.xml"
Content-Type: application/xml;
et si le fichier n'est pas du texte, vous avez également besoin de
Content-Transfer-Encoding: binary