Разница в запросах cURL и WordPress
cURL — очень популярная библиотека PHP, на которую я ссылался в нескольких других сообщениях (например, 1 и 2 ). И я думаю, что его следует просмотреть, изучить и, возможно, использовать всем, кто работает с PHP (да, даже тем, кто работает с WordPress).
Но из-за нативных API-интерфейсов WordPress у нас есть уровень абстракции, который позволяет нам достичь большей части той же функциональности (если не той же функциональности).
В частности, я говорю о wp_safe_remote_get.
Эта функция идеальна, когда HTTP-запрос отправляется на произвольный URL-адрес. URL-адрес проверяется, чтобы избежать перенаправления и подделки запросов.
Я специально упоминаю безопасный вариант этой функции для приведенного выше определения (есть и другой вариант, но важно принять меры предосторожности против произвольных URL-адресов по соображениям безопасности).
cURL и запросы WordPress
В любом случае, как могла бы выглядеть функция, если бы мы использовали эту библиотеку 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
);
}
Вкратце (и это характерно для большинства запросов cURL):
- инициализировать библиотеку cURL,
- установить параметры, характерные для вашего запроса (которые будут варьироваться в зависимости от указанного запроса),
- сделать запрос,
- оценить ответ
- поймать все необходимые исключения.
А если бы мы использовали тот же вариант кода в WordPress?
<?php
$response = wp_safe_remote_get($url);
if (is_wp_error($response)) {
return '';
}
$response = $response['body'];
Это намного меньше и, возможно, легче читать (по крайней мере, для тех, кто работает в WordPress). Что касается аргументов, я также не передаю в функцию ничего, кроме URL.
Если вы прочтете связанную документацию по API, то увидите, что у нас есть некоторый контроль над этим; однако это будет зависеть от того, как вам нужно взаимодействовать с данной конечной точкой.
Кроме того, как вы справляетесь с WP_Error, зависит от вас. Возврат пустой строки редко бывает лучшим вариантом; однако для целей этого примера этого достаточно. Случай, который нам в первую очередь нужен, — это тело ответа, и это фокус кода.
Когда мы используем тот или иной?
Когда дело доходит до работы с удаленными запросами cURL и WordPress и определения того, какой метод использовать, я склонен следовать этому правилу:
- Если то, что мне нужно, может быть достигнуто с помощью функции WordPress API, я использую ее.
- Если нет, я буду использовать cURL.
Я не могу предложить более твердое правило.
Вместо этого посмотрите на конечную точку, с которой вы общаетесь, определите, какой уровень контроля над запросом вам нужен, и примите решение о том, как вы хотите обрабатывать ответ.
Оттуда у вас должно быть хорошее представление о том, какую библиотеку использовать.
