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

Różnica w żądaniach cURL i WordPress

38

cURL to bardzo popularna biblioteka PHP, do której odwoływałem się w kilku innych postach (na przykład 1 i 2 ). Uważam, że powinien zostać przejrzany, zbadany i prawdopodobnie używany przez każdego pracującego w PHP (tak, nawet tych pracujących w WordPressie).

Ale z powodu natywnych interfejsów API WordPress mamy poziom abstrakcji, który pozwala nam osiągnąć wiele z tych samych funkcji (jeśli nie tę samą funkcjonalność).

W szczególności mówię o wp_safe_remote_get.

Różnica w żądaniach cURL i WordPress

Ta funkcja jest idealna, gdy żądanie HTTP jest kierowane do dowolnego adresu URL. Adres URL jest weryfikowany, aby uniknąć przekierowań i ataków fałszowania żądań.

Konkretnie wspominam o bezpiecznym wariancie tej funkcji dla powyższej definicji (istnieje inny wariant, ale ze względów bezpieczeństwa ważne jest, aby zachować środki ostrożności przed przypadkowymi adresami URL).

cURL i żądania WordPress

W każdym razie, jak mogłaby wyglądać funkcja, gdybyśmy używali tej biblioteki cURL?

<?php

try {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    $response = curl_exec($curl);

    if (is_object($response)) {
        return false;
    }

    if (false === $response) {
        throw new Exception(curl_error($curl), curl_errno($curl));
    }

    curl_close($curl);
} catch (Exception $e) {
    trigger_error(
        sprintf(
            'Curl failed with error #%d: %s',
            $e->getCode(),
            $e->getMessage()
        ),
        E_USER_ERROR
    );
}

W skrócie (i jest to typowe dla większości żądań cURL):

  • zainicjować bibliotekę cURL,
  • ustawić opcje specyficzne dla Twojego żądania (które będą się różnić w zależności od tego żądania),
  • złożyć wniosek,
  • oceń odpowiedź
  • złap wszystkie niezbędne wyjątki.

A gdybyśmy mieli użyć tej samej odmiany kodu w WordPressie?

<?php

$response = wp_safe_remote_get($url);
if (is_wp_error($response)) {
    return '';
}
$response = $response['body'];

Jest znacznie mniejszy i prawdopodobnie łatwiejszy do odczytania (przynajmniej dla osób pracujących w WordPressie). Jeśli chodzi o argumenty, również nie przekazuję do funkcji niczego poza adresem URL.

Jeśli przeczytasz połączoną dokumentację API, zobaczysz, że mamy nad tym pewną kontrolę; jednak będzie się różnić w zależności od tego, jak musisz komunikować się z danym punktem końcowym.

Ponadto, jak poradzisz sobie z WP_Error, zależy od Ciebie. Zwrócenie pustego ciągu rzadko jest najlepszą opcją; jednak na potrzeby tego przykładu jest to wystarczające. Sprawa, której szukamy przede wszystkim, to treść odpowiedzi i na tym skupiamy się w kodzie.

Kiedy używamy jednego lub drugiego?

Jeśli chodzi o pracę ze zdalnymi żądaniami cURL i WordPress oraz określenie, której metody użyć, kieruję się tą zasadą:

  • Jeśli to, czego potrzebuję, można osiągnąć za pomocą funkcji API WordPress, korzystam z niej.
  • Jeśli nie, użyję cURL.

Nie mogę podać bardziej solidnej zasady.

Zamiast tego spójrz na punkt końcowy, z którym się komunikujesz, określ, jakiego poziomu kontroli potrzebujesz nad żądaniem, i podejmij decyzję, jak chcesz obsłużyć odpowiedź.

Stamtąd powinieneś mieć dobry pomysł, której biblioteki użyć.

Ź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