101 votes

Comment passer de POST à GET en PHP CURL

J'ai essayé de commutation à partir d'une précédente requête Post à une requête Get. Ce qui suppose que sa a Obtenir, mais finalement fait un post.

J'ai essayé les en PHP :

curl_setopt($curl_handle, CURLOPT_POSTFIELDS, null);
curl_setopt($curl_handle, CURLOPT_POST, FALSE);
curl_setopt($curl_handle, CURLOPT_HTTPGET, TRUE);

Ce qui me manque?

Informations supplémentaires: J'ai déjà une connexion de configuration à faire une requête POST. Qui se termine avec succès, mais plus tard, quand j'essaie de réutiliser la connexion et de basculer en arrière pour OBTENIR l'aide de la setopts ci-dessus, il finit toujours par en faire un POST à l'interne avec les incomplète POST-têtes. Le problème est qu'il croit que sa fait un OBTENIR, mais finit par mettre un POST de tête, sans le contenu du paramètre longueur et la connexion échoue avec 411 ERREUR.

122voto

RC. Points 15804

Assurez-vous que vous mettez votre chaîne de requête à la fin de votre URL lorsque vous faites une requête GET.

$qry_str = "?x=10 et y=20";
$ch = curl_init();

// Définir les données de la 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');
$contenu = trim(curl_exec($ch));
curl_close($ch);
print $contenu;
Avec un POST vous transmettre les données via le CURLOPT_POSTFIELDS option à la place 
de passage dans la CURLOPT__URL.
-------------------------------------------------------------------------

$qry_str = "x=10 et 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éfinition de la méthode de demande de POSTE
curl_setopt($ch, CURLOPT_POST, 1);

// Définir les données de la requête ici avec CURLOPT_POSTFIELDS
curl_setopt($ch, CURLOPT_POSTFIELDS, $qry_str);

$contenu = trim(curl_exec($ch));
curl_close($ch);
print $contenu;

Note de l' curl_setopt() docs pour CURLOPT_HTTPGET (italiques ajoutés):

[Set CURLOPT_HTTPGET égal à] TRUE pour réinitialiser la méthode de requête HTTP GET.
Depuis OBTENEZ est la valeur par défaut, ce n'est nécessaire que si la méthode de la requête a été changé.

60voto

Bao Le Points 1468

Ajoutez ceci avant d'appeler curl_exec ($ curl_handle)

 curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
 

42voto

gnosio Points 336

Résolu: le problème réside ici:

J'ai mis POST via les deux _CUSTOMREQUEST et _POST et les _CUSTOMREQUEST persisté sous la forme de POST tandis que _POST 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');
 

0voto

Eli Points 14599

Voici un bel exemple de la différence:

http://www.weberdev.com/get_example-4606.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X