In dieser Serie untersuchen wir die wp_remote_get
WordPress-HTTP-API-Funktion, um zu verstehen, wie sie funktioniert, wie man sie verwendet und welche optionalen Parameter sie akzeptiert.
Von hier aus können wir eine detaillierte Anfrage schreiben; das ist jedoch nur die Hälfte – da ist auch die Antwort.
Im zweiten Artikel haben wir uns angeschaut, wie eine grundlegende Antwort aussieht, wie man sie auswertet und wie man sie auf dem Bildschirm anzeigt, aber wir haben die Antwort nicht im Detail besprochen. p>
Wenn Sie fortgeschrittenere Anfragen und defensiveren Code schreiben möchten, ist es wichtig, die als Antwort gesendeten Daten zu verstehen. Im letzten Artikel werden wir genau das tun.
Zunächst ist es wichtig zu verstehen, was ich unter dem Schreiben von defensivem Code verstehe: Beim Schreiben von Software müssen wir uns häufig mit Situationen auseinandersetzen, in denen der Benutzer möglicherweise etwas falsch macht, Eingaben möglicherweise falsch eingestellt sind oder Daten abgerufen oder empfangen werden können – zum Beispiel in einem Antwortfall - falsch.
Zu diesem Zweck programmieren wir defensiv für diese Szenarien, damit unsere Software nicht vollständig abstürzt oder abstürzt, während der Benutzer sie verwendet. Stattdessen schlägt es ordnungsgemäß fehl und läuft weiter.
Da wir genau wissen, was eine Funktion als Antwort auf ihre Anfrage erhält, wissen wir, nach welchen Daten wir suchen müssen und wie wir dann elegant mit der Situation umgehen können, wenn sie nicht wie erwartet zurückkehrt.
Um uns darauf vorzubereiten, was Sie erwartet, schauen wir uns eine Beispielantwort an. Nehmen wir an, Sie möchten eine GET
-Anfrage an eine URL stellen, die Ihnen einen einfachen Text zurückgibt.
Im Allgemeinen können Sie eine komplexere Anfrage stellen, bei der die Antwort XML, JSON oder etwas anderes sein könnte. Alle diese Informationen werden jedoch im body
-Index des Antwortarrays festgelegt. Wenn Sie also wissen, was Sie erwartet, wissen Sie, wie Sie damit umgehen müssen.
Vor diesem Hintergrund ist dies die Antwort, die Sie von einer einfachen Anfrage an die Domain erwarten würden, die nur Klartext zurückgibt.
Array ( [headers] => Array ( [date] => Thu, 30 Sep 2010 15:16:36 GMT [server] => Apache [x-powered-by] => PHP/5.3.3 [x-server] => 10.90.6.243 [expires] => Thu, 30 Sep 2010 03:16:36 GMT [cache-control] => Array ( [0] => no-store, no-cache, must-revalidate [1] => post-check=0, pre-check=0 ) [vary] => Accept-Encoding [content-length] => 1641 [connection] => close [content-type] => application/php ) [body] => 'A simple bit of text.' [response] => Array ( [code] => 200 [message] => OK ) [cookies] => Array() )
ist nichts anderes als ein Array (oder eigentlich ein Array von Arrays). Nichts allzu Schlimmes, oder?
Sehen wir uns jedes responsive Element im Detail an.
Wie Sie der obigen Antwort entnehmen können, besteht der Header tatsächlich aus einem weiteren Array mit zusätzlichen Informationen.
Bevor Sie sich die einzelnen Informationen oben ansehen, ist es wichtig zu verstehen, was genau eine Überschrift ist. Vereinfacht ausgedrückt liefern Header Informationen über die zwischen Client und Server bestehende Anfrage-/Antwortkommunikation.
Es gibt eine Vielzahl von Headern, die zurückgesendet werden können (viele davon gehen über den Rahmen dieses Artikels hinaus), aber sie alle helfen uns, nicht nur Informationen über die Anfrage, sondern auch über den Server für die Anfrage zu erhalten. Wir kommunizieren.
Nachdem dies gesagt ist, werfen wir einen Blick auf jedes Header-Element im Detail.
Natürlich ist dies ein sehr leicht zu verstehendes Element: Dies ist einfach das Datum und die Uhrzeit, zu der die Nachricht gesendet wurde. Es enthält natürlich den Wochentag, das Datum und die Uhrzeit in Greenwich Mean Time, dem globalen Zeitstandard.
Das Serverelement bezieht sich auf die Art der Software, die auf dem Server ausgeführt wird. Normalerweise werden Sie wahrscheinlich Apache sehen, es sind jedoch jetzt auch andere Serveranwendungen verfügbar, wie z. B. IIS und das kommende Nginx.
X-Powered-By bezieht sich auf die Serversoftware, die Kommunikationstransaktionen unterstützt. In unserem Fall sehen wir PHP, was einfach bedeutet, dass unsere Anfragen an einen Server gesendet werden, auf dem Apache und PHP ausgeführt werden.
Aber das ist möglicherweise nicht immer der Fall.
Zum Beispiel könnte es sein, dass Sie mit Servern kommunizieren, auf denen Nginx und Python laufen, oder mit anderen Arten von Serversoftware, auf denen Ruby on Rails läuft.
Dieses spezifische Antwortelement bezieht sich auf die IP-Adresse des Servers, an den die Anfrage gesendet wurde. Ich muss diese spezifischen Informationen selten kennen. Wenn Sie jedoch eine unerwartete Antwort erhalten, obwohl alle anderen Informationen in Ordnung zu sein scheinen, kann es hilfreich sein zu wissen, ob die IP des Servers mit der Domäne übereinstimmt, an die die Anfrage gesendet werden soll . hat geholfen.
Immer wenn eine Anfrage gestellt und eine Antwort gesendet wird, kann man sagen, dass die Antwort einen Lebenszyklus hat.
Genauer gesagt werden Antworten nach einer bestimmten Zeit als „veraltet“ betrachtet. Offensichtlich gilt die Zeit, in der eine Antwort als veraltet gilt, auch als abgelaufen.
Der Zeitpunkt, zu dem eine Antwort als nicht veraltet gilt, hängt von der Serverkonfiguration ab, aber der Zeitstempel hat dasselbe Format wie das Anfragedatum.
Cache-Kontrolle bezieht sich auf das Konzept, dass ein Webbrowser (oder ein anderer Caching-Mechanismus, der zwischen Client und Server besteht) die erste Antwort als Antwort für zukünftige Anfragen verwenden kann oder nicht. p>
Wenn die Serverantwort no-cache
,则意味着请求机器的浏览器、服务器或其他代理软件或缓存机制必须将每个响应视为新响应。另一方面,如果 no-cache
beispielsweise nicht spezifiziert ist, ist die erste Antwort möglicherweise die einzige Antwort, die Sie erhalten können (zumindest bis der Cache abläuft
Dies besteht offensichtlich aus zwei Indizes:
no-cache
ob es festgelegt wurdepost-check
和 pre-check
-Intervall abgelaufen ist, wird eine aktualisierte Version der Daten angefordert, andernfalls wird die zwischengespeicherte Version abgerufen. Dieser spezielle Aspekt des Cachings geht über den Rahmen dieser Serie hinaus, da noch viel mehr geschrieben und erklärt werden kann. Die obige Definition sollte jedoch ausreichen, um die angezeigten Überschriften zu erklären.
Dieser Header-Wert ähnelt dem Cache-Control-Header darin, dass er dem anfragenden Server mitteilt, wie er ähnliche nachfolgende Anfragen verarbeiten soll.
Im Allgemeinen zeigt dies dem Server an, ob eine zwischengespeicherte Antwort verwendet werden kann oder ein neuer Wert abgerufen werden muss. Dies ist ein weiteres Element, das übermäßig komplex werden kann, aber um zu versuchen, die Erklärung auf den breiteren Bereich dessen, worüber wir sprechen, zu destillieren, können unterschiedliche Header-Elemente dem Server auch die verschiedenen Inhaltstypen anzeigen, die der Server erwartet. Kunde kann damit umgehen.
Im obigen Beispiel weisen wir den Server also an, dass unser Client in der Lage ist, verschlüsselte Informationen zu verarbeiten.
Content-Length ist ein einfaches Konzept mit einem Haken: Erstens definiert es einfach die Länge des Antworttextes.
Das Problem ist, dass es in 8-Bit-Bytes geschieht. Das bedeutet, dass die Antwort nicht in Kilobyte, Megabyte oder einer anderen Datenform bereitgestellt wird, die wir normalerweise sehen.
Dazu müssen Sie möglicherweise einige Transformationen durchführen, wenn Sie umfassendere Informationen über die zurückgegebenen Daten sammeln möchten.
Der Verbindungswert gibt den vom anfragenden Browser bevorzugten Verbindungstyp an. Oben sehen wir, dass der Wert als „close“ definiert ist, was bedeutet, dass die Verbindung geschlossen werden kann, sobald die Antwort gesendet wurde.
Es gibt jedoch auch andere Möglichkeiten. Beispielsweise erhalten Sie möglicherweise „Keep-Alive“, das offensichtlich die Verbindung für eine Weile aufrechterhalten möchte.
Dies ist ein weiteres Beispiel, für dessen ausführliche Beschreibung ein eigener Artikel erforderlich wäre. Dies bietet jedoch Einblicke in die vom Server bevorzugten Verbindungstypen, die Ihnen bei der Formulierung zukünftiger Anfragen helfen können.
Das ist eigentlich nur für POST
和 PUSH
Anfragen relevant. Kurz gesagt, definiert dies den Hauptteiltyp der Anfrage.
Dies kann je nach gesendeten Daten variieren. Manchmal könnte es eine verschlüsselte URL sein, manchmal könnte es PHP sein, manchmal könnte es etwas anderes sein. Unabhängig davon trägt dies dazu bei, dass wir überprüfen können, ob die im Inhalt zurückgegebenen Daten mit unseren Erwartungen aufgrund der Anfrage übereinstimmen.
body-Element enthält tatsächlich die vom Server zurückgegebenen Informationen.
In den Beispielen aus den beiden vorherigen Artikeln haben wir einen JSON-String von Twitter erhalten. Im obigen Beispiel erhalten wir eine einfache Textzeichenfolge. Letztendlich kann die Antwort in Form von Binärdaten zurückgegeben werden, was einen gewissen Grad an Deserialisierung erfordert.
Unabhängig davon liegt es in unserer Verantwortung als Anforderungsimplementierer, zu verstehen, wie die Antwort richtig dekodiert wird, bevor sie dem Benutzer angezeigt wird.
Eine Antwort bezieht sich eigentlich auf den HTTP-Antwortcode, der vom Server an den anfragenden Client zurückgesendet wird. Wenn Sie mit HTTP-Statuscodes nicht vertraut sind, empfehle ich Ihnen, HTTPStat.us als sehr gute Referenz zu besuchen.
Kurz gesagt besteht eine Antwort aus einem numerischen Code und einer Textnachricht, die das Ergebnis der Anfrage angibt.
Im obigen Beispiel können Sie sehen, dass wir einen Statuscode „200“ und eine „OK“-Nachricht erhalten haben. Code- und Nachrichtenkorrespondenz sind immer synchron zueinander.
Das heißt, wenn Sie eine „403“ erhalten, sollten Sie auch eine „Verboten“-Nachricht erhalten, oder wenn Sie eine „404“-Nachricht erhalten, sollten Sie eine „Nicht gefunden“-Nachricht erhalten.
Ich persönlich halte diese spezifischen Werte für sehr wichtig, um zu diagnostizieren, ob mit einer von mir gestellten Anfrage etwas nicht stimmt.
Schließlich bezieht sich das Cookie-Array auf alle Informationen, die über das Netzwerk gesendet werden, basierend auf den Cookies, die zwischen dem aktuellen Client und dem Server, mit dem er kommuniziert, vorhanden sind.
Abhängig von der Art Ihrer Anfrage kann dies leer sein oder auch nicht – dies ist von Fall zu Fall zu unterschiedlich, um eine klare Orientierung zu geben. Kurz gesagt: Wenn zwischen zwei Verbindungen keine Cookies eingerichtet werden, ist die Verbindung höchstwahrscheinlich immer leer. Andernfalls basieren die Daten, aus denen das Cookie-Array besteht, ausschließlich auf den Cookies, die zwischen den beiden Diensten vorhanden sind.
Insgesamt ist die Datenmenge ziemlich groß, und je nachdem, was Sie erhalten möchten und wie der Server antwortet, variieren die Daten von Anfrage zu Anfrage. Das Problem besteht jedoch darin, dass Sie jetzt wissen, was Sie erwartet und wie Behandeln Sie alle Fälle korrekt.
Wenn es für Sie schlimmer wird, können Sie jederzeit einen Debugger verwenden oder einfach einige Debug-Anweisungen wie eingeben, um zu sehen, was der Server zurückgibt, damit Sie den Fehler ordnungsgemäß behandeln können. print_r
或 var_dump
zu überprüfen, damit wir ein umfassendes Verständnis der HTTP-API haben. wp_remote_post
和 wp_remote_request
Bis dahin bietet Ihnen diese Serie hoffentlich eine möglichst ausführliche Einführung wp_remote_get
, die Ihnen nicht nur dabei hilft, Ihre Arbeit zu verbessern, sondern auch Ihre Neugier weckt, was in Sachen Remote-Anfragen sonst noch möglich ist.
Das obige ist der detaillierte Inhalt vonEntdecken Sie die WordPress-HTTP-API: Erfahren Sie mehr über wp_remote_get und seine Antworten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!