Eigentlich möchte ich den Inhalt lesen, der nach der Suchabfrage kommt, wenn es fertig ist. Das Problem ist, dass die URL nur POST
Methoden akzeptiert und mit GET
method keine Aktion ausführt ...
Ich muss alle Inhalte mit Hilfe von domdocument
oder lesen file_get_contents()
. Gibt es eine Methode, mit der ich Parameter mit POST
Methode senden und dann den Inhalt über lesen kann PHP
?
file_get_contents()
, wenn die fopen-Wrapper aktiviert wurden. Siehe php.net/manual/en/…file_get_contents()
file_get_contents()
ist, obwohl sie Teil des PHP-Kerns ist. Außerdem kann die unnötige Verwendung einer Erweiterung die Angriffsfläche Ihrer App erweitern. ZB Google PHP Curl CveSie könnten cURL verwenden :
quelle
Ich benutze die folgende Funktion, um Daten mit Curl zu posten. $ data ist ein Array von Feldern, die veröffentlicht werden sollen (wird mit http_build_query korrekt codiert). Die Daten werden mit application / x-www-form-urlencoded codiert.
@Edward erwähnt, dass http_build_query möglicherweise weggelassen wird, da curl das an den Parameter CURLOPT_POSTFIELDS übergebene Array korrekt codiert. In diesem Fall werden die Daten jedoch mithilfe von Multipart- / Formulardaten codiert.
Ich verwende diese Funktion mit APIs, die erwarten, dass Daten mit application / x-www-form-urlencoded codiert werden. Deshalb benutze ich http_build_query ().
quelle
http_build_query
konvertiert das$data
Array in eine Zeichenfolge und vermeidet die Ausgabe als mehrteilige / Formulardaten.... CURLOPT_RETURNTRANSFER, true
Ergebnisse in$response
den Inhalt enthält.file_get_contents
und Ihre Lösung braucht CURL, was viele Leute nicht haben. Ihre Lösung funktioniert also möglicherweise, beantwortet jedoch nicht die Frage, wie dies mit den nativen integrierten Datei- / Stream-Funktionen geschehen soll.Ich empfehle Ihnen, die Open-Source- Paketfresser zu verwenden , die vollständig auf Einheitentests getestet wurde und die neuesten Codierungsmethoden verwendet.
Guzzle installieren
Gehen Sie zur Befehlszeile in Ihrem Projektordner und geben Sie den folgenden Befehl ein (vorausgesetzt, Sie haben den Paketmanager- Composer bereits installiert). Wenn Sie Hilfe bei der Installation von Composer benötigen, sollten Sie hier nachsehen .
Verwenden von Guzzle zum Senden einer POST-Anfrage
Die Verwendung von Guzzle ist sehr einfach, da eine leichte objektorientierte API verwendet wird:
quelle
Es gibt eine andere CURL-Methode, wenn Sie diesen Weg gehen.
Dies ist ziemlich einfach, wenn Sie sich erst einmal mit der Funktionsweise der PHP-Curl-Erweiterung vertraut gemacht haben und verschiedene Flags mit setopt () -Aufrufen kombinieren. In diesem Beispiel habe ich eine Variable $ xml, die das XML enthält, das ich zum Senden vorbereitet habe. Ich werde den Inhalt davon in der Testmethode des Beispiels veröffentlichen.
Zuerst haben wir die Verbindung initialisiert, dann haben wir einige Optionen mit setopt () festgelegt. Diese teilen PHP mit, dass wir eine Post-Anfrage stellen und dass wir einige Daten damit senden und die Daten liefern. Das CURLOPT_RETURNTRANSFER-Flag weist curl an, die Ausgabe als Rückgabewert von curl_exec anzugeben, anstatt sie auszugeben. Dann rufen wir an und schließen die Verbindung - das Ergebnis ist eine Antwort von $.
quelle
$ch
nicht$curl
richtig sein?Wenn Sie zufällig Wordpress verwenden, um Ihre App zu entwickeln (es ist tatsächlich eine bequeme Möglichkeit, Autorisierungen, Infoseiten usw. zu erhalten, selbst für sehr einfache Dinge), können Sie das folgende Snippet verwenden:
Je nachdem, was auf dem Webserver verfügbar ist, werden verschiedene Methoden zum Erstellen der eigentlichen HTTP-Anforderung verwendet. Weitere Informationen finden Sie in der Dokumentation zur HTTP-API .
Wenn Sie kein benutzerdefiniertes Design oder Plugin zum Starten der Wordpress-Engine entwickeln möchten, können Sie in einer isolierten PHP-Datei im WordPress-Stammverzeichnis einfach Folgendes tun:
Es wird kein Thema angezeigt oder HTML ausgegeben. Hacken Sie einfach mit den Wordpress-APIs!
quelle
Ich möchte einige Gedanken zur lockenbasierten Antwort von Fred Tanrikut hinzufügen. Ich weiß, dass die meisten von ihnen bereits in den obigen Antworten geschrieben sind, aber ich denke, es ist eine gute Idee, eine Antwort zu zeigen, die alle zusammen enthält.
Hier ist die Klasse, die ich geschrieben habe, um HTTP-GET / POST / PUT / DELETE-Anforderungen basierend auf Curl zu stellen, die sich nur auf den Antworttext beziehen:
Verbesserungen
Anwendungsbeispiel
ERHALTEN
POST
STELLEN
LÖSCHEN
Testen
Mit dieser einfachen Klasse können Sie auch einige coole Servicetests durchführen.
quelle
Eine andere Alternative der oben beschriebenen Methode ohne Locken besteht darin, die nativen Stream- Funktionen zu verwenden:
stream_context_create()
::stream_get_contents()
::Eine POST-Funktion mit diesen kann einfach so aussehen:
quelle
fclose()
wenn$fp
istfalse
. Weilfclose()
erwartet, dass eine Ressource ein Parameter ist.Der bessere Weg zum Senden
GET
oderPOST
Anfragen mitPHP
ist wie folgt:Der Code stammt aus der offiziellen Dokumentation hier http://docs.php.net/manual/da/httprequest.send.php
quelle
Es gibt noch eine, die Sie verwenden können
Hier klicken für Details
quelle
Ich suchte nach einem ähnlichen Problem und fand einen besseren Ansatz dafür. Also los geht's.
Sie können einfach die folgende Zeile auf die Umleitungsseite setzen (z. B. page1.php).
Ich brauche dies, um POST-Anfragen für umzuleiten REST- API-Aufrufe . Diese Lösung kann sowohl mit Post-Daten als auch mit benutzerdefinierten Header-Werten umleiten.
Hier ist der Referenzlink .
quelle
redirect a page request with POST param
vs nicht verstandensend POST request
. Für mich ist der Zweck von beiden gleich, korrigiere mich, wenn ich falsch liege.Hier wird nur ein Befehl ohne cURL verwendet. Super einfach.
quelle
Probieren Sie das Paket HTTP_Request2 von PEAR aus , um POST-Anforderungen einfach zu senden. Alternativ können Sie die Curl-Funktionen von PHP oder einen PHP- Stream-Kontext verwenden .
HTTP_Request2 ermöglicht es auch , den Server zu verspotten , sodass Sie Ihren Code problemlos einem Unit-Test unterziehen können
quelle