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.
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ć.
