Comment passer de POST à ??GET en PHP CURL
Question
J'ai essayé de passer d'une requête Post précédente à une requête Get. Ce qui suppose qu’il s’agit d’un Get mais fait éventuellement un post.
J'ai essayé ce qui suit en PHP:
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, null);
curl_setopt($curl_handle, CURLOPT_POST, FALSE);
curl_setopt($curl_handle, CURLOPT_HTTPGET, TRUE);
Qu'est-ce qui me manque?
Informations complémentaires: J'ai déjà une connexion qui est configurée pour faire une demande POST. Cela se termine avec succès, mais plus tard, lorsque j'essaie de réutiliser la connexion et de revenir à GET en utilisant la configuration ci-dessus, il finit toujours par effectuer un POST en interne avec des en-têtes POST incomplets. Le problème est qu’il croit qu’il fait un GET mais finit par mettre un en-tête POST sans le paramètre content-length et que la connexion échoue avec 411 ERROR.
La solution 3
résolu: le problème réside ici:
J'ai défini POST
via _CUSTOMREQUEST
et _POST
et le _CUSTOMREQUEST
conservé comme POST
pendant que _POST
est passé à _HTTPGET
. Le serveur a supposé que l'en-tête de _CUSTOMREQUEST
était le bon et est revenu avec un 411.
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');
Autres conseils
Assurez-vous de placer votre chaîne de requête à la fin de votre URL lorsque vous faites une demande GET.
$qry_str = "?x=10&y=20"; $ch = curl_init(); // Set query data here with the URL curl_setopt($ch, CURLOPT_URL, 'http://example.com/test.php' . $qry_str); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 3); $content = trim(curl_exec($ch)); curl_close($ch); print $content;
With a POST you pass the data via the CURLOPT_POSTFIELDS option instead of passing it in the CURLOPT__URL. ------------------------------------------------------------------------- $qry_str = "x=10&y=20"; curl_setopt($ch, CURLOPT_URL, 'http://example.com/test.php'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 3); // Set request method to POST curl_setopt($ch, CURLOPT_POST, 1); // Set query data here with CURLOPT_POSTFIELDS curl_setopt($ch, CURLOPT_POSTFIELDS, $qry_str); $content = trim(curl_exec($ch)); curl_close($ch); print $content;
Note tirée des curl_setopt ()
docs pour CURLOPT_HTTPGET
(non souligné dans l'original):
[Définissez CURLOPT_HTTPGET égal à]
TRUE
sur réinitialisez la méthode de requête HTTP à GET.
Étant donné que GET est la valeur par défaut, cela n'est nécessaire que si la méthode de requête a été modifiée.
Ajoutez ceci avant d'appeler curl_exec ($ curl_handle)
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
La requête CURL par défaut est GET, vous n'avez pas besoin de définir d'options pour effectuer une requête GET CURL.