Heim  >  Artikel  >  Backend-Entwicklung  >  PHP implementiert das Senden und Empfangen von JSON-Anfragen

PHP implementiert das Senden und Empfangen von JSON-Anfragen

不言
不言Original
2018-06-07 09:56:233663Durchsuche

In diesem Artikel erfahren Sie detaillierte Methoden und Beispielcodes zum Senden und Empfangen von JSON-Anfragen in PHP. Interessierte Freunde können sich darauf beziehen.

In aktuellen Microservices müssen viele APIs viele Parameter übergeben, daher benötigen sie JSON-Daten, die alle Parameter als Anforderungstext der POST-Anfrage enthalten, um die FormData-Methode zum Übergeben von Parametern zu ersetzen JSON Es ist einfacher zu entwickeln und zu testen als POST FormData. Heute werfen wir einen Blick darauf, wie man JOSN POST in PHP sendet und akzeptiert, sowie die praktische Methode zum Zugriff auf JSON-Anfragedaten, die vom Laravel-Framework für JSON Request bereitgestellt werden.

PHP sendet JSON POST

$url = "http://example.com/request/post/json"; 
$data = json_encode(["foo" => "bar"]);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_exec($curl);
curl_close($curl);

PHP akzeptiert JSON POST

$data = json_decode(file_get_contents('php://input'), true);

$HTTP_RAW_POST_DATA](http://php.net/manual/zh/reserved.variables.httprawpostdata.php), da es nicht auf spezifischen php.ini-Anweisungen basiert. Auch der Fall, dass [$HTTP_RAW_POST_DATA standardmäßig nicht ausgefüllt ist, erfordert möglicherweise weniger Speicher als wenn Always_populate_raw_post_data aktiviert ist. Wenn enctype="multipart/form-data" verwendet wird, ist php://input ungültig.

Hinweis: Vor PHP 5.6 kann der von php://input geöffnete Datenstrom nur einmal gelesen werden; der Datenstrom unterstützt keinen Suchvorgang. Abhängig von der Implementierung von SAPI kann jedoch beim Speichern der Anforderungstextdaten ein anderer php://-Eingabedatenstrom geöffnet und erneut gelesen werden. Normalerweise ist dies nur bei POST-Anfragen der Fall, nicht bei anderen Anfragemethoden wie PUT oder PROPFIND.

Verwenden Sie Guzzle, um JSON-Anfragen zu senden

Oft verwenden wir in der Entwicklung nicht die PHP-Curl-Bibliothek, um Anfragen wie oben beschrieben zu senden, sondern verwenden Open-Source-HTTP Paket, ein häufig verwendetes HTTP-Paket wie Guzzle bietet praktische Methoden zum Senden von JSON-Anfragen.

//Guzzle version >= 5
use GuzzleHttp\Client;

$client = new Client();

$response = $client->post('url', [
 GuzzleHttp\RequestOptions::JSON => ['foo' => 'bar']
]);

Akzeptiere JSON POST in Laravel

Verwende Request's json()->all( ) Holen Sie sich den gesamten JSON im Anfragetext

//IN controller
public function recieveJson(Request $request)
{
 $request->json()->all();
 //返回值是一个数组
 //针对前面的请求例子,json方法返回的是数组 ["foo" => "bar"]
 //$request->json()返回的是ParamBage
}

Verwenden Sie die Eingabemethode „Request“, um den gesamten JSON oder den Wert des spezifischen Schlüssels in der Anfrage abzurufen

Wenn Sie eine JSON-Anfrage an eine Laravel-Anwendung senden, können die JSON-Daten über die Eingabemethode abgerufen werden, solange der Content-Type-Anfrageheader auf application/json gesetzt ist, und das Array kann ebenfalls abgerufen werden analysiert durch das „.“-Zeichen:

public function laravelRecieveJson(Reuqest $request)
{
  $foo = $request->input('foo');//echo $foo => 'bar'
  //使用点号获取内嵌数组key的值
  //假设请求体中的JSON为 {"user": {"name": "kevin", "age": 18}}
  $name = $reqeust->input('user.name');//echo $name => 'kevin'
}

Verwandte Empfehlungen:

So verwenden Sie PHP, um auf die RabbitMQ-Nachrichtenwarteschlange zuzugreifen

Einfache Implementierung in PHP Funktion zur Aufzeichnung von Website-Besuchen

Das obige ist der detaillierte Inhalt vonPHP implementiert das Senden und Empfangen von JSON-Anfragen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn