Ich bin ein Neuling und versuche, ein Skript zu bekommen, um ein anderes Skript mit Curl in PHP auszulösen, aber es scheint die Parameter nicht zu senden.
Gibt es eine separate Funktion zum Anhängen von Parametern?
Tun Sie dies nicht; $ch = curl_init("http://mysite.php?message=$urlmessage&time=$time"); Mach das; $ch = curl_init('http://mysite.php?message=' . $urlmessage . '&time=' . $time); Es ist viel einfacher zu lesen, und Sie sind ein Byte/8 sicherer. Was wäre, wenn Sie eine Variable hätten $urles könnte theoretisch stattdessen verwendet werden $urlmessage.
– Philipp
16. Juni 2011 um 6:23 Uhr
@Philiplip: Noch besser, verwenden Sie sprintf(). So: sprintf(‘mysite.com/myscript.php?message=%s&time=%d‘, $urlmessage, $time); (EDIT: …. scheint nicht herauszufinden, wie man Codeteile in Kommentare einfügt …: S)
– Battle_707
16. Juni 2011 um 6:29 Uhr
Die akzeptierte Antwort ist gut für POST, aber was wäre, wenn OP speziell GET wollte? Einige REST-APIs spezifizieren die http-Methode und oft ist es kein gutes POSTing, wenn Sie GETting sein sollten.
Hier ist ein Codefragment, das GET mit einigen Parametern ausführt:
Dies führt dazu, dass Ihre Anfrage mit gestellt wird GET zu http://example.com/endpoint?foo=bar. Dies ist die Standard-http-Methode, es sei denn, Sie setzen sie auf etwas anderes wie z POST mit curl_setopt($ch, CURLOPT_POST, true) – Tun Sie das also nicht, wenn Sie speziell GET benötigen.
Wenn Sie eine der anderen HTTP-Methoden (z. B. DELETE oder PUT) verwenden müssen, verwenden Sie curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method). Dies funktioniert auch für GET und POST.
PS: auch prüfen http_build_query() was praktisch ist, wenn viele Variablen gesendet werden.
Vielen Dank, das einzige Problem dabei ist, dass meine Variablen nicht als Werte oder Zeichenfolgen gepostet werden können, sondern als Literale, dh $time sollte = 5327287, aber $time = “$time” stattdessen. Trotzdem danke
– Christoph
16. Juni 2011 um 6:14 Uhr
@Christopher: Ändern Sie die einfachen Anführungszeichen in doppelte Anführungszeichen, wodurch das Problem der Literale behoben wird. Fügen Sie außerdem die Zeichenfolge der POST-Werte in eine Variable ein, anstatt sie innerhalb des Funktionsaufrufs curl_setopt zu erstellen. Dies liegt daran, dass es im Allgemeinen eine gute Idee ist, auch die POST-Länge mit dem Curl zu senden, und dann müssen Sie die Abfrage nicht zweimal erstellen.
– Battle_707
16. Juni 2011 um 6:27 Uhr
Gibt es trotzdem, dass das Skript ausgeführt wird, aber dann zum Original zurückkehrt?
– Christoph
16. Juni 2011 um 7:01 Uhr
@chrisR wie verwendet man diese Werte in der ausgelösten PHP-Datei auf der Serverseite?
– Zame
29. August 2016 um 21:24 Uhr
@WalidSarkis erstellt mit CURLOPT_POSTFIELDS nur eine POST-HTTP-Anforderung mit POST-Parametern, sodass Sie auf der Empfängerseite über das globale $_POST in PHP darauf zugreifen können
– ChrisR
30. August 2016 um 8:51 Uhr
du brauchst satz CURLOPT_POST wie true und CURLOPT_POSTFIELDS => Parameter
ein Vorschlag, set ‘CURLOPT_RETURNTRANSFER‘, als wahr, um die Übertragung als Zeichenfolge des Rückgabewerts von zurückzugeben curl_exec($ch) anstatt es direkt auszugeben
Dies ist eine viel bessere Lösung als die akzeptierte. Es ist besser einzustellen CURLOPT_POSTFIELDS zu einem Array von Parametern, als eine Version einer Abfragezeichenfolge zu erstellen.
Bitte lesen Sie die PHP-Dokumentation durch: us3.php.net/manual/en/book.curl.php. Dieses Problem wird ziemlich ausführlich erklärt.
– Battle_707
16. Juni 2011 um 6:23 Uhr
Tun Sie dies nicht;
$ch = curl_init("http://mysite.php?message=$urlmessage&time=$time");
Mach das;$ch = curl_init('http://mysite.php?message=' . $urlmessage . '&time=' . $time);
Es ist viel einfacher zu lesen, und Sie sind ein Byte/8 sicherer. Was wäre, wenn Sie eine Variable hätten$url
es könnte theoretisch stattdessen verwendet werden$urlmessage
.– Philipp
16. Juni 2011 um 6:23 Uhr
@Philiplip: Noch besser, verwenden Sie sprintf(). So: sprintf(‘mysite.com/myscript.php?message=%s&time=%d‘, $urlmessage, $time); (EDIT: …. scheint nicht herauszufinden, wie man Codeteile in Kommentare einfügt …: S)
– Battle_707
16. Juni 2011 um 6:29 Uhr