PHP curl: CURLOPT_URL, CURLOPT_POST, et CURLOPT_POSTFIELDS
Si j'ai une URL qui ressemble à ceci:
$url = 'http://domain.com/?foo=bar';
Et ensuite exécuter curl comme suit:
$resource = curl_init();
curl_setopt($resource, CURLOPT_URL, $url);
curl_setopt($resource, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($resource);
curl_close($resource);
Je comprends que je fais cette demande via GET (par défaut).
Maintenant si j'ai mis l'option suivante dans le même scénario:
curl_setopt($resource, CURLOPT_POST, 1);
Je comprends qu'il utilise POST au lieu de GET, mais est-il alors de POST foo
avec une valeur de bar
? Ou serait la bonne façon pour que:
$url = 'http://domain.com/';
$post = 'foo=bar';
$resource = curl_init();
curl_setopt($resource, CURLOPT_URL, $url);
curl_setopt($resource, CURLOPT_POST, 1);
curl_setopt($resource, CURLOPT_POSTFIELDS, $post);
curl_setopt($resource, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($resource);
curl_close($resource);
Et ce qui se passe si je fais cela (c'est à dire soumettre la valeur dans l'URL et via CURLOPT_POSTFIELDS):
$url = 'http://domain.com/?foo=bar';
$post = 'foo=bar';
$resource = curl_init();
curl_setopt($resource, CURLOPT_URL, $url);
curl_setopt($resource, CURLOPT_POST, 1);
curl_setopt($resource, CURLOPT_POSTFIELDS, $post);
curl_setopt($resource, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($resource);
curl_close($resource);
Comment les données seront présentées dans ce scénario?
OriginalL'auteur NightHawk | 2012-06-06
Vous devez vous connecter pour publier un commentaire.
La différence entre la POSTE et l'OBTENIR est de savoir comment le serveur récupère les données. Comme vous avez défini CURLOPT_POST à true, le serveur reçoit normalement les paramètres via le CURLOPT_POSTFIELDS valeur (c'est à dire les paramètres dans le corps HTTP) et probablement d'ignorer les paramètres passés dans l'URL de la chaîne - mais cela dépend vraiment de la personne du serveur.
$post
, il échoue. Si je garde les valeurs dans l'URL et ne définissez pas CURLOPT_POSTFIELDS, mais toujours CURLOPT_POST à 1, alors il réussit, et qui n'a pas de sens pour moi. Ainsi est-il possible que leur API REST est défectueux?Il ne fait pas trop de sens pour moi non plus, ce qui se passe si vous l'envoyez en une requête GET, mais ajouter un en-tête HTTP "content-type: application/x-www-form-urlencoded'?
Si j'utilise l'OBTENIR, même avec cet en-tête, - je obtenir une demande spécifique d'erreur qui dit OBTENIR n'est pas pris en charge.
Eh bien, il semble que prévu fonctionnement, la compagnie sont évidemment libres de mettre en œuvre leurs API de la façon dont ils le souhaitent. Donc, ils veulent vous envoyer une requête POST avec les paramètres passés dans l'URL plutôt que de la charge utile.
Si, toutefois, vous envoyez un message avec pas de publier des données, mais toutes les données via l'URL, ce qui ne fait que fournir à la société, et comment est-ce différent puis à l'aide de GET?
OriginalL'auteur Steve