J'ai essayé de passer d'une requête Post précédente à une requête Get. Ce qui suppose que c'est un Get mais finalement un post.
J'ai essayé ce qui suit dans 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 que je rate?
Informations complémentaires: Je dispose déjà d'une connexion configurée pour effectuer 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 incomplets POST. Le problème est qu’il croit qu’il effectue une opération GET, mais finit par placer un en-tête POST sans le paramètre content-length et la connexion échoue avec 411 ERROR.
Résolu: le problème réside ici:
J'ai mis POST
via les deux _CUSTOMREQUEST
et _POST
et le _CUSTOMREQUEST
persistait sous la forme POST
tant que _POST
est passé à _HTTPGET
. Le serveur a assumé l'en-tête de _CUSTOMREQUEST
être le bon et est revenu avec un 411.
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');
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 (); // Définissez les données de requête ici avec l'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 = rim (curl_exec ($ ch) ); curl_close ($ ch); print $ content;
Avec a POST, vous transmettez les données via l'option CURLOPT_POSTFIELDS au lieu de Pour les transmettre à 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); // Définit la méthode de requête sur POST Curl_setopt ($ ch, CURLOPT_POST, 1); // Définit les données de la requête ici avec CURLOPT_POSTFIELDS Curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ qry_str); $ content = trim (curl_exec ($ ch)); curl_close ($ ch); print $ contenu;
Note de la curl_setopt()
docs pour CURLOPT_HTTPGET
(accentuation ajoutée):
[Définissez CURLOPT_HTTPGET égal à]
TRUE
pour réinitialiser la méthode de requête HTTP en GET.
Comme 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 ne devez définir aucune option pour effectuer une requête GET CURL.