Wie sende ich eine POST-Anfrage mit PHP?

653

Eigentlich möchte ich den Inhalt lesen, der nach der Suchabfrage kommt, wenn es fertig ist. Das Problem ist, dass die URL nur POSTMethoden akzeptiert und mit GETmethod keine Aktion ausführt ...

Ich muss alle Inhalte mit Hilfe von domdocumentoder lesen file_get_contents(). Gibt es eine Methode, mit der ich Parameter mit POSTMethode senden und dann den Inhalt über lesen kann PHP?

Fred Tanrikut
quelle

Antworten:

1256

CURL-freie Methode mit PHP5:

$url = 'http://server.com/path';
$data = array('key1' => 'value1', 'key2' => 'value2');

// use key 'http' even if you send the request to https://...
$options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query($data)
    )
);
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === FALSE) { /* Handle error */ }

var_dump($result);

Weitere Informationen zur Methode und zum Hinzufügen von Headern finden Sie im PHP-Handbuch, zum Beispiel:

dbau
quelle
63
Es ist erwähnenswert, dass Sie die Schlüssel oder Werte NICHT mit '\ r \ n' beenden, wenn Sie sich für die Verwendung eines Arrays für die Header entscheiden. stream_context_create () nimmt den Text nur bis zum ersten '\ r \ n'
Raptor
10
Eine URL kann nur dann als Dateiname verwendet werden file_get_contents(), wenn die fopen-Wrapper aktiviert wurden. Siehe php.net/manual/en/…
Pino
3
@ Ich liebefile_get_contents()
Deadlock
14
Gibt es einen bestimmten Grund, CURL nicht zu verwenden?
Jvannistelrooy
36
@jvannistelrooy CURL für PHP ist eine Erweiterung, die möglicherweise nicht in allen Umgebungen vorhanden 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 Cve
Taschen und
137

Sie könnten cURL verwenden :

<?php
//The url you wish to send the POST request to
$url = $file_name;

//The data you want to send via POST
$fields = [
    '__VIEWSTATE '      => $state,
    '__EVENTVALIDATION' => $valid,
    'btnSubmit'         => 'Submit'
];

//url-ify the data for the POST
$fields_string = http_build_query($fields);

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

//So that curl_exec returns the contents of the cURL; rather than echoing it
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); 

//execute post
$result = curl_exec($ch);
echo $result;
?>
Fred Tanrikut
quelle
3
Diese hat für mich funktioniert, weil die Seite, die ich an eine Seite sende, die keinen Inhalt hat, so dass die Version file_get_contents nicht funktioniert hat.
CommentLuv
8
Die Lösung file_get_contents funktioniert nicht bei PHP-Konfigurationen mit allow_url_fopen Off (wie beim Shared Hosting). Diese Version verwendet Curl-Bibliothek und ich denke, ist am "universellsten", also gebe ich Ihnen meine Stimme
Dayron Gallardo
81
Sie haben nicht angegeben, wo Sie dieses Codebeispiel kopiert haben von: davidwalsh.name/curl-post
efreed
3
Obwohl dies nicht sehr wichtig ist, müssen die Parameterdaten von CURLOPT_POSTFIELDS nicht in eine Zeichenfolge ("urlified") konvertiert werden. Quote: "Dieser Parameter kann entweder als urlencodierte Zeichenfolge wie 'para1 = val1 & para2 = val2 & ...' oder als Array mit dem Feldnamen als Schlüssel und den Felddaten als Wert übergeben werden. Wenn value ein Array ist, der Inhaltstyp Der Header wird auf Multipart / Formulardaten gesetzt. " Link: php.net/manual/en/function.curl-setopt.php .
Edward
2
Es ist auch keine Beleidigung, es anders zu schreiben, aber ich weiß nicht, warum der Parameter CURLOPT_POST hier als Zahl angegeben wird, da er besagt, dass er auf der Handbuchseite auf einen Booleschen Wert gesetzt werden soll. Quote: "CURLOPT_POST: TRUE, um einen regulären HTTP-POST durchzuführen." Link: php.net/manual/en/function.curl-setopt.php .
Edward
67

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.

function httpPost($url, $data)
{
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($curl);
    curl_close($curl);
    return $response;
}

@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 ().

Dima L.
quelle
Das Übergeben eines Arrays an CURLOPT_POSTFIELDS bewirkt, dass Daten unter Verwendung von Mehrteil- / Formulardaten codiert werden, was möglicherweise nicht wünschenswert ist.
Dima L.
Der Benutzer hat nach file_get_contents gefragt, daher benötigt er eine Lösung zum Ändern des default_stream_context
Radon8472
Zur Verdeutlichung: Ich denke @DimaL. antwortet auf einen Kommentar, der gelöscht wurde; http_build_querykonvertiert das $dataArray in eine Zeichenfolge und vermeidet die Ausgabe als mehrteilige / Formulardaten.
ToolmakerSteve
@ Radon8472 - ... CURLOPT_RETURNTRANSFER, trueErgebnisse in $responseden Inhalt enthält.
ToolmakerSteve
@ToolmakerSteve Wie gesagt, die Frage war für file_get_contentsund 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.
Radon8472
41

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 .

php composer.phar require guzzlehttp/guzzle

Verwenden von Guzzle zum Senden einer POST-Anfrage

Die Verwendung von Guzzle ist sehr einfach, da eine leichte objektorientierte API verwendet wird:

// Initialize Guzzle client
$client = new GuzzleHttp\Client();

// Create a POST request
$response = $client->request(
    'POST',
    'http://example.org/',
    [
        'form_params' => [
            'key1' => 'value1',
            'key2' => 'value2'
        ]
    ]
);

// Parse the response object, e.g. read the headers, body, etc.
$headers = $response->getHeaders();
$body = $response->getBody();

// Output headers and body for debugging purposes
var_dump($headers, $body);
Andreas
quelle
7
Es wäre hilfreich zu wissen, welche Vorteile dies gegenüber der bereits veröffentlichten nativen PHP-Lösung und der cURL-Lösung hat.
Artfulrobot
9
@artfulrobot: Die native PHP-Lösung hat viele Probleme (z. B. Verbindung mit https, Zertifikatsüberprüfung usw.), weshalb fast jeder PHP-Entwickler cURL verwendet. Und warum nicht in diesem Fall cURL verwenden? Es ist ganz einfach: Guzzle verfügt über eine unkomplizierte, einfache und leichte Benutzeroberfläche, die all diese "Low-Level-CURL-Handhabungsprobleme" aufhebt. Fast jeder, der modernes PHP entwickelt, verwendet Composer, daher ist die Verwendung von Guzzle ganz einfach.
Andreas
2
Vielen Dank, ich weiß, dass Guzzle beliebt ist. Es gibt jedoch Anwendungsfälle, in denen Composer Kummer verursacht (z. B. das Entwickeln von Plugins für größere Softwareprojekte, bei denen möglicherweise bereits eine (andere Version) von Guzzle oder anderen Abhängigkeiten verwendet wird). Daher ist es gut, diese Informationen zu kennen eine Entscheidung darüber, welche Lösung am robustesten sein wird
artfulrobot
25

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.

$url = 'http://api.example.com/services/xmlrpc/';
$ch = curl_init($url);

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);
//process $response

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 $.

Josip Ivic
quelle
1
im 3. Aufruf von curl_setopt () sollte das erste Argument $chnicht $curlrichtig sein?
jcomeau_ictx
Können Sie denselben Code zum POSTEN von JSON-Daten verwenden? Aber ersetzen Sie $ xml durch $ json (wo $ json wahrscheinlich eine JSON-Zeichenfolge ist?)
Neal Davis
23

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:

$response = wp_remote_post( $url, array('body' => $parameters));

if ( is_wp_error( $response ) ) {
    // $response->get_error_message()
} else {
    // $response['body']
}

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:

require_once( dirname(__FILE__) . '/wp-load.php' );

// ... your code

Es wird kein Thema angezeigt oder HTML ausgegeben. Hacken Sie einfach mit den Wordpress-APIs!


quelle
21

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:

class HTTPRequester {
    /**
     * @description Make HTTP-GET call
     * @param       $url
     * @param       array $params
     * @return      HTTP-Response body or an empty string if the request fails or is empty
     */
    public static function HTTPGet($url, array $params) {
        $query = http_build_query($params); 
        $ch    = curl_init($url.'?'.$query);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, false);
        $response = curl_exec($ch);
        curl_close($ch);
        return $response;
    }
    /**
     * @description Make HTTP-POST call
     * @param       $url
     * @param       array $params
     * @return      HTTP-Response body or an empty string if the request fails or is empty
     */
    public static function HTTPPost($url, array $params) {
        $query = http_build_query($params);
        $ch    = curl_init();
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
        $response = curl_exec($ch);
        curl_close($ch);
        return $response;
    }
    /**
     * @description Make HTTP-PUT call
     * @param       $url
     * @param       array $params
     * @return      HTTP-Response body or an empty string if the request fails or is empty
     */
    public static function HTTPPut($url, array $params) {
        $query = \http_build_query($params);
        $ch    = \curl_init();
        \curl_setopt($ch, \CURLOPT_RETURNTRANSFER, true);
        \curl_setopt($ch, \CURLOPT_HEADER, false);
        \curl_setopt($ch, \CURLOPT_URL, $url);
        \curl_setopt($ch, \CURLOPT_CUSTOMREQUEST, 'PUT');
        \curl_setopt($ch, \CURLOPT_POSTFIELDS, $query);
        $response = \curl_exec($ch);
        \curl_close($ch);
        return $response;
    }
    /**
     * @category Make HTTP-DELETE call
     * @param    $url
     * @param    array $params
     * @return   HTTP-Response body or an empty string if the request fails or is empty
     */
    public static function HTTPDelete($url, array $params) {
        $query = \http_build_query($params);
        $ch    = \curl_init();
        \curl_setopt($ch, \CURLOPT_RETURNTRANSFER, true);
        \curl_setopt($ch, \CURLOPT_HEADER, false);
        \curl_setopt($ch, \CURLOPT_URL, $url);
        \curl_setopt($ch, \CURLOPT_CUSTOMREQUEST, 'DELETE');
        \curl_setopt($ch, \CURLOPT_POSTFIELDS, $query);
        $response = \curl_exec($ch);
        \curl_close($ch);
        return $response;
    }
}

Verbesserungen

  • Verwenden von http_build_query, um die Abfragezeichenfolge aus einem Anforderungsarray abzurufen (Sie können auch das Array selbst verwenden, siehe daher: http://php.net/manual/en/function.curl-setopt.php ).
  • Die Antwort zurückgeben, anstatt sie zu wiederholen. Übrigens können Sie die Rückkehr vermeiden, indem Sie die Zeile curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, true) entfernen. . Danach ist der Rückgabewert ein Boolescher Wert (true = Anfrage war erfolgreich, andernfalls ist ein Fehler aufgetreten) und die Antwort wird wiederholt. Siehe: http://php.net/en/manual/function.curl-exec.php
  • Bereinigen Sie das Schließen und Löschen der Sitzung des Curl- Handlers mithilfe von curl_close . Siehe: http://php.net/manual/en/function.curl-close.php
  • Die Verwendung von Booleschen Werten für die Funktion curl_setopt anstelle einer beliebigen Zahl (ich weiß, dass jede Zahl ungleich Null ebenfalls als wahr angesehen wird, aber die Verwendung von wahr erzeugt einen besser lesbaren Code, aber das ist nur meine Meinung).
  • Möglichkeit zum Ausführen von HTTP-PUT / DELETE-Aufrufen (nützlich für RESTful-Servicetests)

Anwendungsbeispiel

ERHALTEN

$response = HTTPRequester::HTTPGet("http://localhost/service/foobar.php", array("getParam" => "foobar"));

POST

$response = HTTPRequester::HTTPPost("http://localhost/service/foobar.php", array("postParam" => "foobar"));

STELLEN

$response = HTTPRequester::HTTPPut("http://localhost/service/foobar.php", array("putParam" => "foobar"));

LÖSCHEN

$response = HTTPRequester::HTTPDelete("http://localhost/service/foobar.php", array("deleteParam" => "foobar"));

Testen

Mit dieser einfachen Klasse können Sie auch einige coole Servicetests durchführen.

class HTTPRequesterCase extends TestCase {
    /**
     * @description test static method HTTPGet
     */
    public function testHTTPGet() {
        $requestArr = array("getLicenses" => 1);
        $url        = "http://localhost/project/req/licenseService.php";
        $this->assertEquals(HTTPRequester::HTTPGet($url, $requestArr), '[{"error":false,"val":["NONE","AGPL","GPLv3"]}]');
    }
    /**
     * @description test static method HTTPPost
     */
    public function testHTTPPost() {
        $requestArr = array("addPerson" => array("foo", "bar"));
        $url        = "http://localhost/project/req/personService.php";
        $this->assertEquals(HTTPRequester::HTTPPost($url, $requestArr), '[{"error":false}]');
    }
    /**
     * @description test static method HTTPPut
     */
    public function testHTTPPut() {
        $requestArr = array("updatePerson" => array("foo", "bar"));
        $url        = "http://localhost/project/req/personService.php";
        $this->assertEquals(HTTPRequester::HTTPPut($url, $requestArr), '[{"error":false}]');
    }
    /**
     * @description test static method HTTPDelete
     */
    public function testHTTPDelete() {
        $requestArr = array("deletePerson" => array("foo", "bar"));
        $url        = "http://localhost/project/req/personService.php";
        $this->assertEquals(HTTPRequester::HTTPDelete($url, $requestArr), '[{"error":false}]');
    }
}
mwatzer
quelle
Für mich heißt es "Nicht erfasster Fehler: Aufruf der undefinierten Methode HTTPRequester :: HTTPost ()" . Ich habe Ihre Klasse einfach in meine .php-Datei eingefügt. Was muss ich sonst noch tun?
LinusGeffarth
1
Können Sie bitte Ihren Code posten? Es ist ziemlich schwer zu erraten, was ohne Code-Snippet falsch ist.
Mwatzer
Wie gesagt, ich habe deine buchstäblich in meine einfache PHP-Datei kopiert und es gab mir diesen Fehler.
LinusGeffarth
1
Ok, jetzt sehe ich das Problem. Es war im Beispiel falsch! Sie müssen HTTPRequester :: HTTPPost () anstelle von HTTPRequester :: HTTPost ()
mwatzer
1
Ah. Das ist leicht zu übersehen. Ich musste Ihren Kommentar wie 5x lesen, bevor ich das zusätzliche P entdeckte . Vielen Dank!
LinusGeffarth
19

Eine andere Alternative der oben beschriebenen Methode ohne Locken besteht darin, die nativen Stream- Funktionen zu verwenden:

  • stream_context_create()::

    Erstellt einen Stream-Kontext mit allen in der Optionsvoreinstellung angegebenen Optionen und gibt diesen zurück .

  • stream_get_contents()::

    Identisch mit file_get_contents(), außer dass dies stream_get_contents() auf einer bereits geöffneten Stream- Ressource ausgeführt wird und den verbleibenden Inhalt in einer Zeichenfolge bis zu einer maximalen Länge von Bytes und beginnend mit dem angegebenen Offset zurückgibt .

Eine POST-Funktion mit diesen kann einfach so aussehen:

<?php

function post_request($url, array $params) {
  $query_content = http_build_query($params);
  $fp = fopen($url, 'r', FALSE, // do not use_include_path
    stream_context_create([
    'http' => [
      'header'  => [ // header array does not need '\r\n'
        'Content-type: application/x-www-form-urlencoded',
        'Content-Length: ' . strlen($query_content)
      ],
      'method'  => 'POST',
      'content' => $query_content
    ]
  ]));
  if ($fp === FALSE) {
    return json_encode(['error' => 'Failed to get contents...']);
  }
  $result = stream_get_contents($fp); // no maxlength/offset
  fclose($fp);
  return $result;
}
CPHPython
quelle
1
Diese CURL-freie Methode hat für mich gut funktioniert, um reCAPTCHA von Google zu validieren. Diese Antwort konvergiert mit diesem Google-Code: github.com/google/recaptcha/blob/master/src/ReCaptcha/…
Xavi Montero
1
Sie müssen nicht verwenden, fclose()wenn $fpist false. Weil fclose()erwartet, dass eine Ressource ein Parameter ist.
Floris
1
@Floris hat es gerade bearbeitet und in der Tat erwähnt das fclose- Dokument "Der Dateizeiger muss gültig sein". Vielen Dank, dass Sie das bemerkt haben!
CPHPython
8

Der bessere Weg zum Senden GEToder POSTAnfragen mit PHPist wie folgt:

<?php
    $r = new HttpRequest('http://example.com/form.php', HttpRequest::METH_POST);
    $r->setOptions(array('cookies' => array('lang' => 'de')));
    $r->addPostFields(array('user' => 'mike', 'pass' => 's3c|r3t'));

    try {
        echo $r->send()->getBody();
    } catch (HttpException $ex) {
        echo $ex;
    }
?>

Der Code stammt aus der offiziellen Dokumentation hier http://docs.php.net/manual/da/httprequest.send.php

Imran Zahoor
quelle
1
@akinuri danke für das Hervorheben, ich werde das neue teilen.
Imran Zahoor
wie geht das auf PHP 5x?
@YumYumYum Bitte überprüfen Sie die Antwort von dbau oben für 5x, die diese Technik verwendet. Php.net/manual/en/function.stream-context-create.php Oder Sie können jederzeit zur Standard-Curl-Lösung zurückkehren.
Imran Zahoor
5

Es gibt noch eine, die Sie verwenden können

<?php
$fields = array(
    'name' => 'mike',
    'pass' => 'se_ret'
);
$files = array(
    array(
        'name' => 'uimg',
        'type' => 'image/jpeg',
        'file' => './profile.jpg',
    )
);

$response = http_post_fields("http://www.example.com/", $fields, $files);
?>

Hier klicken für Details

Code
quelle
2
Dies basiert auf einer PECL-Erweiterung, die die meisten nicht installiert haben. Ich bin mir nicht einmal sicher, ob es noch verfügbar ist, da die Handbuchseiten entfernt wurden.
miken32
5

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).

header("Location: URL", TRUE, 307); // Replace URL with to be redirected URL, e.g. final.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 .

Arindam Nayak
quelle
1
Hier erfahren Sie, wie Sie eine Seitenanforderung nicht umleiten. Wie sende ich eine POST-Anfrage mit PHP? Sicher würde dies alle POST-Parameter weiterleiten, aber das ist überhaupt nicht dasselbe
Wesley Smith
@ DelightedD0D, Entschuldigung, ich habe den Unterschied zwischen redirect a page request with POST paramvs nicht verstanden send POST request. Für mich ist der Zweck von beiden gleich, korrigiere mich, wenn ich falsch liege.
Arindam Nayak
1
Gibt es eine Methode, mit der ich Parameter mit der POST-Methode senden und dann den Inhalt über PHP lesen kann? Das OP möchte, dass ihr PHP-Skript einen Satz von POST-Parametern erstellt und diese an eine andere PHP-Seite sendet und dass ihr Skript die Ausgabe von dieser Seite empfängt. Diese Lösung würde einfach einen bereits geposteten Satz von Werten akzeptieren und diese an eine andere Seite weiterleiten. Sie sind ziemlich unterschiedlich.
Wesley Smith
5

Hier wird nur ein Befehl ohne cURL verwendet. Super einfach.

echo file_get_contents('https://www.server.com', false, stream_context_create([
    'http' => [
        'method' => 'POST',
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'content' => http_build_query([
            'key1' => 'Hello world!', 'key2' => 'second value'
        ])
    ]
]));
Liga
quelle
Wie funktioniert der Key2? Was ist der Trenner zwischen ihnen?
Sayed Muhammad Idrees
@Sayedidrees, um key2 hinzuzufügen, können Sie ihn als zweites Array-Element eingeben. 'key1' => 'Hallo Welt!', 'key2' => 'zweiter Wert'
Liga
Dies funktioniert sehr gut bei der Verwendung mit Zapier.
Moxet
3

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

cweiske
quelle
7
Ich würde gerne sehen, dass Sie es ausarbeiten, wenn möglich.
Gui Imamura