wake-up-neo.com

So wechseln Sie von POST zu GET in PHP CURL

Ich habe versucht, von einer früheren Post-Anfrage zu einer Get-Anfrage zu wechseln. Was davon ausgeht, dass es ein Get ist, aber irgendwann einen Post macht.

Ich habe Folgendes in PHP versucht:

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

Was vermisse ich?

Zusätzliche Informationen: Ich habe bereits eine Verbindung, die für die Ausführung einer POST - Anforderung eingerichtet ist. Dies wird erfolgreich abgeschlossen, aber später, wenn ich versuche, die Verbindung erneut zu verwenden und mit den obigen Settops zu GET zurückzukehren, wird immer noch intern ein POST mit unvollständigen POST - Headern ausgeführt. Das Problem ist, dass es glaubt, ein GET auszuführen, aber am Ende einen POST - Header ohne den Parameter content-length setzt und die Verbindung mit einem 411-FEHLER fehlschlägt.

79
gnosio

Gelöst: Das Problem liegt hier:

Ich habe POST sowohl über _CUSTOMREQUEST als auch über _POST und den _CUSTOMREQUEST als POST festgelegt, während _POST auf _HTTPGET umgestellt. Der Server hat den Header von _CUSTOMREQUEST als den richtigen Header angenommen und kam mit einem 411 zurück.

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');
33
gnosio

Stellen Sie sicher, dass Sie Ihre Abfragezeichenfolge am Ende Ihrer URL einfügen, wenn Sie eine GET-Anforderung ausführen.

 $ qry_str = "? x = 10 & y = 20"; 
 $ ch = curl_init (); 
 
 // Hier werden die Abfragedaten mit der 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; 
 Mit einem POST=) übergeben Sie die Daten über die Option CURLOPT_POSTFIELDS, anstatt 
 In CURLOPT__URL zu übergeben. 
 ------- -------------------------------------------------- ---------------- 
 
 $ 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); 
 
 // Setzt die Anforderungsmethode auf POST 
 Curl_setopt ($ ch, CURLOPT_POST, 1); 
 
 // Setzt hier die Abfragedaten mit CURLOPT_POSTFIELDS 
 Curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ qry_str); 
 
 $ content = trim (curl_exec ($ ch)); 
 curl_close ($ ch); 
 print $ Inhalt;

Anmerkung aus den curl_setopt() docs für CURLOPT_HTTPGET (Betonung hinzugefügt):

[Setzen Sie CURLOPT_HTTPGET auf] TRUE, um die HTTP-Anforderungsmethode auf GET zurückzusetzen .
Da GET die Standardeinstellung ist, ist dies nur erforderlich, wenn die Anforderungsmethode geändert wurde.

104
RC.

Fügen Sie dies hinzu, bevor Sie curl_exec ($ curl_handle) aufrufen.

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

CURL-Anforderung ist standardmäßig GET. Sie müssen keine Optionen festlegen, um eine GET CURL-Anforderung zu erstellen.

2