A diferença em solicitações cURL e WordPress
cURL é uma biblioteca PHP muito popular que eu mencionei em vários posts outros posts (1 e 2, por exemplo). E é um que eu acho que deve ser revisado, explorado e possivelmente usado por qualquer pessoa que trabalhe em PHP (sim, mesmo aqueles que trabalham em WordPress).
Mas por causa das APIs nativas do WordPress, temos um nível de abstração que nos permite obter muitas das mesmas funcionalidades (se não a mesma funcionalidade).
Especificamente, estou falando de wp_safe_remote_get.
Essa função é ideal quando a solicitação HTTP está sendo feita para uma URL arbitrária. A URL é validada para evitar redirecionamentos e solicitações de ataques de falsificação.
Menciono especificamente a variante segura desta função para a definição acima (há outra variante, mas é importante tomar precauções contra URLs arbitrárias por motivos de segurança).
cURL e solicitações do WordPress
De qualquer forma, como seria uma função se usássemos essa biblioteca 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
);
}
Resumindo (e isso é típico para a maioria das solicitações cURL):
- inicialize a biblioteca cURL,
- definir opções específicas para sua solicitação (que variam de acordo com a solicitação),
- faça o pedido,
- avaliar a resposta
- capturar quaisquer exceções necessárias.
E então se usássemos a mesma variação do código no WordPress?
<?php
$response = wp_safe_remote_get($url);
if (is_wp_error($response)) {
return '';
}
$response = $response['body'];
Isso é muito menor e sem dúvida mais fácil de ler (pelo menos para aqueles que trabalham no WordPress). Em termos de argumentos, também não estou passando nada para a função além da URL.
Se você ler a documentação da API vinculada, verá que temos algum controle sobre isso; no entanto, irá variar dependendo de como você precisa se comunicar com um determinado ponto de extremidade.
Além disso, como você lida com o WP_Error é com você. Retornar uma string vazia raramente é a melhor opção; no entanto, para os propósitos deste exemplo, é suficiente. O caso que procuramos principalmente é o corpo da resposta e esse é o foco do código.
Quando usamos um ou outro?
Quando se trata de trabalhar com solicitações remotas cURL e WordPress e determinar qual método usar, costumo seguir esta regra:
- Se o que eu preciso pode ser alcançado com uma função de API do WordPress, eu a uso.
- Caso contrário, usarei cURL.
Eu não posso fornecer uma regra mais sólida.
Em vez disso, observe o endpoint que você está comunicando, determine qual nível de controle você precisa sobre a solicitação e tome uma decisão sobre como deseja lidar com a resposta.
A partir daí, você deve ter uma boa ideia de qual biblioteca usar.
