Php Curl fügt Params hinzu

Lesezeit: 4 Minuten

Christophers Benutzeravatar
Christoph

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?

<?php
$time = time();
$message = "hello world";


$urlmessage =  urlencode( $message );

$ch = curl_init("http://mysite.php?message=$urlmessage&time=$time");

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_exec($ch);
curl_close($ch);
?>

Könnte jemand mich in die richtige Richtung weisen??

  • 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 $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:

$endpoint="http://example.com/endpoint";
$params = array('foo' => 'bar');
$url = $endpoint . '?' . http_build_query($params);
curl_setopt($ch, CURLOPT_URL, $url);

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.

Du brauchst curl_setopt() zusammen mit dem Parameter CURLOPT_POSTFIELDS. Dadurch werden die angegebenen Parameter an die Zielseite gesendet.

curl_setopt($ch, CURLOPT_POSTFIELDS, 'foo=1&bar=2&baz=3');

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

  curl_setopt($ch, CURLOPT_POST, true); 
   curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);

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.

    – meconroy

    24. Februar 2016 um 16:09 Uhr

Hier ist eine einfache Lösung dafür.

 $mobile_number = $_POST['mobile_number'];
 $sessionid = $_POST['session_id'];
    CURLOPT_URL => 'https://xxyz.jkl.com/v2.0/search?varible_that_you_want_to_pass=".$mobile_number."&requestId=1616581154955&locale=en-US&sessionId='.$sessionid,

1434120cookie-checkPhp Curl fügt Params hinzu

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy