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.
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');
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.
Fügen Sie dies hinzu, bevor Sie curl_exec ($ curl_handle) aufrufen.
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
CURL-Anforderung ist standardmäßig GET. Sie müssen keine Optionen festlegen, um eine GET CURL-Anforderung zu erstellen.