Je POSTE des données sur une API externe (en utilisant PHP, si c'est pertinent).
Dois-je encoder en URL les variables POST que je transmets?
Ou dois-je uniquement encoder des données GET à l'URL?
Merci!
MISE À JOUR: Ceci est mon PHP, au cas où il serait pertinent:
$fields = array(
'mediaupload'=>$file_field,
'username'=>urlencode($_POST["username"]),
'password'=>urlencode($_POST["password"]),
'latitude'=>urlencode($_POST["latitude"]),
'longitude'=>urlencode($_POST["longitude"]),
'datetime'=>urlencode($_POST["datetime"]),
'category'=>urlencode($_POST["category"]),
'metacategory'=>urlencode($_POST["metacategory"]),
'caption'=>($_POST["description"])
);
$fields_string = http_build_query($fields);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
Réponses:
Réponse générale
La réponse générale à votre question est que cela dépend. Et vous décidez en spécifiant votre "Content-Type" dans les en-têtes HTTP.
Une valeur de "application / x-www-form-urlencoded" signifie que votre corps POST devra être encodé en URL comme une chaîne de paramètres GET. Une valeur de "multipart / form-data" signifie que vous utiliserez des délimiteurs de contenu et PAS d'URL encodant le contenu.
Cette réponse a une explication beaucoup plus approfondie si vous souhaitez plus d'informations.
Réponse spécifique
Pour une réponse spécifique aux bibliothèques PHP que vous utilisez (CURL), vous devriez lire la documentation ici .
Voici les informations pertinentes:
la source
@DougW a clairement répondu à cette question, mais j'aime toujours ajouter quelques codes ici pour expliquer les points de Doug. (Et corrigez les erreurs dans le code ci-dessus)
Solution 1: encodez en URL les données POST avec un en-tête de type content: application / x-www-form-urlencoded.
Remarque: vous n'avez pas besoin de coder url les champs $ _POST [] un par un, la fonction http_build_query () peut bien faire le travail de codage url.
Solution 2: transmettez le tableau directement en tant que données de publication sans encodage d'URL, tandis que l'en-tête Content-Type sera défini sur multipart / form-data.
Les deux extraits de code fonctionnent, mais utilisent des en-têtes et des corps HTTP différents.
la source
curl encodera les données pour vous, déposez simplement vos données de champ brutes dans le tableau de champs et dites-lui de "go".
la source
Les articles ci-dessus répondent aux questions relatives à l'encodage d'URL et à son fonctionnement, mais les questions d'origine étaient "Dois-je encoder des données POST en URL?" qui ne répond pas.
De mon expérience récente avec l'encodage d'URL, je voudrais étendre la question plus loin. "Dois-je encoder des données POST en URL, comme la méthode GET HTTP. En règle générale, les formulaires HTML sur le navigateur sont remplis, soumis et / ou OBTIENNENT des informations, les navigateurs effectuent un encodage d'URL, mais si une application expose un service Web et attend Les consommateurs doivent effectuer un encodage d'URL sur les données, est-il correct d'un point de vue architectural et technique de faire l'encodage d'URL avec la méthode HTTP POST? "
la source