<?php
//
// A very simple PHP example that sends a HTTP POST to a remote site
//
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.example.com/tester.phtml");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
"postvar1=value1&postvar2=value2&postvar3=value3");
// In real life you should use something like:
// curl_setopt($ch, CURLOPT_POSTFIELDS,
// http_build_query(array('postvar1' => 'value1')));
// Receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close ($ch);
// Further processing ...
if ($server_output == "OK") { ... } else { ... }
?>
http_build_query()
, mit Parametern umzugehen; Übergeben Sie einfach das Array anCURLOPT_POSTFIELDS
ist genug.CURLOPT_POSTFIELDS
ein Array ist, wird derContent-Type
Header aufmultipart/form-data
anstelle von gesetztapplication/x-www-form-urlencoded
. php.net/manual/en/function.curl-setopt.phptrue
anstelle von1
für zu verwendenCURLOPT_POST
.Verfahren
Objektorientierter
Verwendungszweck
Randnotiz hier: Es ist am besten, eine Art Schnittstelle zu erstellen, die
AdapterInterface
beispielsweise mitgetResponse()
method aufgerufen wird, und sie von der obigen Klasse implementieren zu lassen. Dann können Sie diese Implementierung jederzeit mit einem anderen Adapter Ihrer Art austauschen, ohne dass Ihre Anwendung Nebenwirkungen hat.Verwenden von HTTPS / Verschlüsseln des Datenverkehrs
Normalerweise gibt es ein Problem mit cURL in PHP unter dem Windows-Betriebssystem. Beim Versuch, eine Verbindung zu einem https-geschützten Endpunkt herzustellen, wird eine Fehlermeldung angezeigt
certificate verify failed
.Was die meisten Leute hier tun, ist, der cURL-Bibliothek anzuweisen, Zertifikatfehler einfach zu ignorieren und fortzufahren (
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
). Damit Ihr Code funktioniert, führen Sie eine große Sicherheitslücke ein und ermöglichen böswilligen Benutzern, verschiedene Angriffe auf Ihre App auszuführen, z. B. Man In The Middle- Angriffe oder ähnliches .Mach das niemals. Stattdessen müssen Sie lediglich Ihre ändern
php.ini
und PHP mitteilen, wo sich IhreCA Certificate
Datei befindet, damit die Zertifikate korrekt überprüft werden können:Die neuesten
cacert.pem
können aus dem Internet heruntergeladen oder aus Ihrem bevorzugten Browser extrahiert werden . Denken Sie beim Ändern derphp.ini
zugehörigen Einstellungen daran, den Webserver neu zu starten.quelle
Ein Live-Beispiel für die Verwendung von php curl_exec zum Erstellen eines HTTP-Posts:
Fügen Sie dies in eine Datei namens foobar.php ein:
Führen Sie es dann mit dem Befehl aus
php foobar.php
. Es gibt diese Art von Ausgabe auf dem Bildschirm aus:Sie haben also einen PHP-POST an www.google.com gesendet und ihm einige Daten gesendet.
Wäre der Server so programmiert worden, dass er die Post-Variablen einliest, könnte er sich dazu entschließen, etwas anderes zu tun.
quelle
$postvars .= $key . $value;
sollte$postvars .= $key . $value ."&";
oder nicht?$fields
Array und es wird eine Abfragezeichenfolge ausgegeben.curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
http_build_query
:curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
Es ist leicht zu erreichen mit:
quelle
Curl Post + Fehlerbehandlung + Header setzen [danke an @ mantas-d]:
quelle
quelle
curl_close
in einemfinally
Block.Wenn das Formular Weiterleitungen, Authentifizierung, Cookies, SSL (https) oder etwas anderes als ein vollständig offenes Skript verwendet, das POST-Variablen erwartet, werden Sie sehr schnell mit dem Zähneknirschen beginnen. Werfen Sie einen Blick auf Snoopy , das genau das tut, was Sie sich vorgestellt haben, ohne dass Sie einen Großteil des Overheads einrichten müssen.
quelle
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Eine einfachere Antwort, wenn Sie Informationen an Ihre eigene Website weitergeben, ist die Verwendung einer SESSION-Variablen. Beginnen Sie die PHP-Seite mit:
Wenn es irgendwann Informationen gibt, die Sie in PHP generieren und an die nächste Seite der Sitzung weiterleiten möchten, anstatt eine POST-Variable zu verwenden, weisen Sie sie einer SESSION-Variablen zu. Beispiel:
Dann verweisen Sie auf der nächsten Seite einfach auf diese SESSION-Variable. HINWEIS: Stellen Sie nach der Verwendung sicher, dass Sie es zerstören, damit es nach der Verwendung nicht bestehen bleibt:
quelle
Hier sind einige Boilerplate-Codes für PHP + Curl http://www.webbotsspidersscreenscrapers.com/DSP_download.php
Die Aufnahme in diese Bibliothek vereinfacht die Entwicklung
quelle
Wenn Sie versuchen, sich vor Ort mit Cookies anzumelden.
Dieser Code:
Funktioniert möglicherweise nicht, wenn Sie versuchen, sich anzumelden, da viele Websites den Status 200 zurückgeben, der Beitrag jedoch nicht erfolgreich ist.
Eine einfache Möglichkeit, um zu überprüfen, ob der Anmeldebeitrag erfolgreich ist, besteht darin, zu überprüfen, ob erneut Cookies gesetzt werden. Wenn in der Ausgabe eine Set-Cookies-Zeichenfolge vorhanden ist, bedeutet dies, dass die Beiträge nicht erfolgreich sind und eine neue Sitzung gestartet wird.
Auch der Beitrag kann erfolgreich sein, aber der Status kann stattdessen umgeleitet werden 200.
Um sicherzugehen, dass der Beitrag erfolgreich ist, versuchen Sie Folgendes:
Folgen Sie dem Speicherort nach dem Beitrag, um zu der Seite zu gelangen, auf die der Beitrag umleitet:
Und dann prüfen Sie, ob in der Anfrage neue Cookies vorhanden sind:
quelle
Beispiele für das Senden von Formularen und Rohdaten :
quelle