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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top