web-dev-qa-db-fra.com

Comment passer de POST à GET in PHP CURL

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.

79
gnosio

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');
33
gnosio

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.

104
RC.

Ajoutez ceci avant d'appeler curl_exec ($ curl_handle)

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
51
Bao Le

La requête CURL par défaut est GET, vous ne devez définir aucune option pour effectuer une requête GET CURL.

2
Albertino Carvalho