Was bedeutet es, WordPress als Proxy zu verwenden?
Wenn Sie längere Zeit mit WordPress gearbeitet haben, insbesondere wenn es um die Verwendung einer Art von Ajax-Funktionalität geht, dann haben Sie wahrscheinlich irgendwann den Satz „WordPress als Proxy verwenden“ gehört.
Und selbst wenn Sie es nicht getan haben, stehen die Chancen, dass Sie es tatsächlich getan haben, ziemlich hoch.
Obwohl ich denke, dass wir im Laufe der Zeit irgendwann sehen werden, wie die REST-API die traditionellen Methoden ersetzt, mit denen wir Ajax verwendet haben, aber das ist wahrscheinlich eine andere Geschichte für ein anderes Mal.
Was bedeutet es also, WordPress als Proxy zu verwenden, wenn Sie mit Ajax-Anfragen arbeiten? Es erfordert ein wenig Verständnis für Cross-Site-Anfragen, wie das Weiterleiten einer Anfrage durch WordPress funktioniert, und das anschließende Analysieren der Antwort.
Verwenden Sie WordPress als Proxy
Das ist ein etwas langer Beitrag, oder? Stattdessen werde ich versuchen, es in kürzere Begriffe zu brechen, damit Sie es lesen und sich dann wieder an die Arbeit machen können.
Als Proxy
Nehmen Sie zunächst die Definition eines Proxys :
die Befugnis, jemand anderen zu vertreten, insbesondere bei Abstimmungen
Wenn Sie auf den obigen Link klicken, werden Sie feststellen, dass es noch ein paar andere Definitionen gibt, aber keine davon ist wirklich ausreichend. Stattdessen denke ich gerne etwas abstrakter an sie, zumindest was die Software betrifft.
Nehmen wir für die Zwecke dieses Beitrags an, dass WordPress ein Proxy für eine Anfrage ist, was bedeutet, dass es dafür verantwortlich ist, als Vermittler zwischen dem Beginn der Anfrage und der Antwort darauf zu fungieren.
Zusamenfassend,
WordPress dient als Proxy, indem es eine Anfrage an einen anderen Dienst weiterleitet und dessen Antwort erfasst.
Vielleicht haben Sie etwas Ähnliches gehört, vielleicht auch nicht. Unabhängig davon könnte es auf hohem Niveau so aussehen:
Wenn Sie nun eine asynchrone Anfrage stellen müssen (oder eine Ajax-Anfrage, wie ich sie im Rest dieses Beitrags verwenden werde), haben Sie eine von zwei Möglichkeiten:
- Stellen Sie die Anfrage an eine Seite, die in WordPress existiert,
- Stellen Sie die Anfrage an eine Seite, die auf der anderen Domain existiert.
Wenn Sie Anfragen an Seiten stellen, die in Ihrer App vorhanden sind (sprich: in WordPress), haben Sie kein Problem.
Zur Sicherheit von Anfragen
Aber das Stellen von Ajax-Anfragen außerhalb Ihrer eigenen Domäne ist ein No-Go. Dies liegt daran, dass XSS und CSRF geschützt werden sollen .
Kurz gesagt beziehen sich diese jeweils auf Folgendes:
XSS-Angriffe treten auf, wenn ein Angreifer eine Webanwendung verwendet, um bösartigen Code, im Allgemeinen in Form eines browserseitigen Skripts, an einen anderen Endbenutzer zu senden
und:
Cross-Site Request Forgery (CSRF) ist ein Angriff, der einen Endbenutzer zwingt, unerwünschte Aktionen in einer Webanwendung auszuführen, in der er derzeit authentifiziert ist.
Kurz gesagt, deshalb müssen wir WordPress als Proxy verwenden. Da stellt sich natürlich die Frage nach dem Wie?
Verwendung von WordPress als Proxy
Dazu benötigen Sie mehrere Dinge:
- eine Seite, die Ihre Ajax-Anfrage abfragen kann,
- eine Funktion, um die Ajax-Anfrage abzufangen und an die richtige URL zu senden,
- eine Möglichkeit für die Serverseite, die Antwort zu analysieren,
- eine Funktion, um die Daten an die ursprüngliche Ajax-Funktion zurückzugeben.
Auch hier werde ich aus Platzgründen kein ausführliches Beispiel dafür liefern, aber es sollte ausreichen, um Ihnen den Einstieg zu erleichtern.
Zuerst müssen Sie sicherstellen, dass Sie eine Funktion haben, um Ihre Ajax-Anfrage abzufangen. Dazu gibt es bereits reichlich Dokumentation im Codex. Ein einfaches Beispiel dafür sähe so aus:
var _get_columns = function() {
// Don't forget to use a nonce or security value here.
var data = {
'action': 'get_all_columns'
'security': '<?php echo wp_create_nonce( "acme-security-ajax-nonce" ); ?>'
};
// TODO Check for error logging if the response value doesn't exist.
$.get( ajaxurl, data, function( response) {
response = $.parseJSON( response );
// Your custom functionality here
});
};
Als nächstes benötigen Sie eine Seite auf dem Server, um eine Anfrage an die URL zu stellen, die Ihre Daten enthält. Dies kann mit cURL erfolgen, dies kann mit file_get_contents erfolgen, und dies kann mit anderen Mitteln erfolgen.
Da ich es nicht weiß und auch kein verschreibungspflichtiges Beispiel geben möchte, werde ich eine sehr einfache Demo zeigen, wie dies funktionieren könnte (zumindest in den frühen Stadien ):
<?php
add_action( 'wp_ajax_get_all_data', 'get_all_data' );
/**
* Retrieves the requested data from the specified URL
* returns the values in JSON.
*/
function get_all_data() {
// Note $url is up to you.
$curl = curl_init( $url );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY );
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, true );
$response = curl_exec( $curl );
$resultStatus = curl_getinfo( $curl );
if( 200 !== $resultStatus['http_code']) {
echo 'Call Failed '.print_r( $result_status );
}
curl_close( $curl );
echo json_encode( utf8_encode( $response) );
wp_die();
}
Wenn Sie eine Antwort erhalten, können Sie sich dafür entscheiden, sie auf der Serverseite zu analysieren (was ich empfehle) und sie in einem einfachen Format an die ursprüngliche JavaScript-Funktion zurückzugeben, wie oben gezeigt. Beachten Sie, dass ich im obigen Code json_encode verwende.
Von dort aus können Sie dann mit den Daten, die Sie haben, alles tun, was Sie für die betreffende Seite tun müssen. Beachten Sie, dass die Informationen im Antwortobjekt enthalten sind und Sie möglicherweise überprüfen müssen, was es enthält, um es richtig zu handhaben. Dies wird im obigen Code erreicht und demonstriert.
Die Details davon hängen jedoch stark davon ab, was Sie erreichen möchten.
WordPress als Proxy
Letztendlich sieht der Kontrollfluss in etwa so aus:
Der Sinn all der obigen Ausführungen besteht darin, Ihnen ein wenig Hintergrundwissen darüber zu vermitteln, warum Sie möglicherweise einen Teil des Codes sehen, den Sie ausführen, und warum Sie Ihren Code so strukturieren müssen.