✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Co to znaczy używać WordPressa jako proxy?

22

Jeśli pracowałeś z WordPressem przez dłuższy czas, zwłaszcza jeśli chodzi o korzystanie z pewnego rodzaju funkcji Ajax, prawdopodobnie w pewnym momencie słyszałeś wyrażenie „użyj WordPressa jako proxy".

I nawet jeśli nie masz szans, że faktycznie to zrobiłeś, są dość wysokie.

Chociaż myślę, że wraz z upływem czasu zobaczymy, że REST API zastąpi tradycyjne sposoby, w jakie używaliśmy Ajax, ale to prawdopodobnie inna historia na inny czas.

Więc co to znaczy używać WordPressa jako proxy za każdym razem, gdy pracujesz z żądaniami Ajax? Wymaga trochę zrozumienia żądań między witrynami, sposobu działania routingu żądania przez WordPress, a następnie przeanalizowania odpowiedzi.

Użyj WordPressa jako proxy

To trochę długi post, prawda? Zamiast tego postaram się opisać to w krótszych terminach, abyś mógł je przeczytać, a następnie wrócić do pracy.

Jako pełnomocnik

Najpierw weźmy definicję proxy :

upoważnienie do reprezentowania kogoś innego, zwłaszcza w głosowaniu

Jeśli klikniesz powyższy link, zauważysz, że istnieje kilka innych definicji, ale żadna z nich nie wystarczy. Zamiast tego lubię myśleć o nich nieco bardziej abstrakcyjnie, przynajmniej jeśli chodzi o oprogramowanie.

Na potrzeby tego posta załóżmy, że WordPress jest serwerem proxy dla żądania, co oznacza, że ​​odpowiada za pośredniczenie między początkiem żądania a odpowiedzią na nie.

W skrócie,

WordPress służy jako proxy, kierując żądanie do innej usługi i przechwytując jej odpowiedź.

Może słyszałeś coś podobnego, a może nie. Niezależnie od tego tak mogłoby wyglądać na wysokim poziomie:

Teraz, gdy musisz wykonać żądanie asynchroniczne (lub żądanie Ajax, jak będę używał w dalszej części tego postu), masz jedną z dwóch opcji:

  1. skierować żądanie do strony istniejącej w WordPressie,
  2. prześlij żądanie do strony, która istnieje w innej domenie.

Jeśli wysyłasz żądania do stron, które istnieją w Twojej aplikacji (czytaj: w WordPress), nie będziesz mieć problemu.

O bezpieczeństwie wniosków

Ale wysyłanie żądań Ajax poza własną domeną nie jest możliwe. Dzieje się tak, ponieważ ma chronić XSS i CSRF.

W skrócie, każdy z nich odnosi się odpowiednio do:

Ataki XSS występują, gdy atakujący używa aplikacji internetowej do wysłania złośliwego kodu, zazwyczaj w postaci skryptu po stronie przeglądarki, do innego użytkownika końcowego

oraz:

Cross-Site Request Forgery (CSRF) to atak, który wymusza na użytkowniku końcowym wykonanie niechcianych akcji w aplikacji sieci Web, w której jest on aktualnie uwierzytelniony.

Krótko mówiąc, musimy używać WordPressa jako proxy. Naturalnie jednak rodzi się pytanie, w jaki sposób?

Korzystanie z WordPressa jako proxy

Aby to zrobić, potrzebujesz kilku rzeczy:

  1.  stronę, którą może wysłać zapytanie Ajax,
  2. funkcja do przechwycenia żądania ajax i wysłania go pod właściwy adres URL,
  3. sposób na przetworzenie odpowiedzi przez stronę serwera,
  4. funkcja zwracająca dane do oryginalnej funkcji Ajax.

Znowu, ze względu na miejsce, nie podam szczegółowego przykładu tego, ale to powinno wystarczyć, aby zacząć.

Po pierwsze, musisz upewnić się, że masz ustawioną funkcję do przechwycenia twojego żądania Ajax. W Kodeksie jest już mnóstwo dokumentacji na ten temat. Prosty przykład wyglądałby tak:

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
    });
};

Następnie potrzebujesz strony na serwerze, aby wysłać żądanie do adresu URL zawierającego Twoje dane. Można to zrobić za pomocą cURL, można to zrobić za pomocą file_get_contents, a można to zrobić w inny sposób.

Ponieważ nie wiem i nie chcę podać nakazowego przykładu, podzielę się bardzo prostym demo, jak to może działać (przynajmniej na wczesnych etapach ):

<?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();
}

Po otrzymaniu odpowiedzi możesz zdecydować się na jej przeanalizowanie po stronie serwera (co polecam) i zwrócić ją przy użyciu lekkiego formatu do oryginalnej funkcji JavaScript, jak pokazano powyżej. Zauważ, że w powyższym kodzie używam json_encode .

Stamtąd możesz zrobić wszystko, co musisz zrobić na danej stronie, korzystając z posiadanych danych. Zwróć uwagę, że informacje są zawarte w obiekcie odpowiedzi i może być konieczne sprawdzenie, co zawiera, aby prawidłowo je obsłużyć. Jest to realizowane i demonstrowane w powyższym kodzie.

Ale szczegóły tego będą w dużej mierze zależeć od tego, co chcesz osiągnąć.

WordPress jako proxy

Ostatecznie przepływ kontroli wygląda mniej więcej tak:

Celem powyższego jest zapewnienie nieco tła, dlaczego możesz zobaczyć część kodu, który wykonujesz, a także dlaczego musisz ustrukturyzować swój kod w ten sposób.

Źródło nagrywania: tommcfarlin.com

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów