…ou quando precisamos de esconder uma API Key dos visitantes e precisamos de criar um pequeno proxy para os nossos pedidos AJAX.
No meu caso precisava de esconder a minha API Key e consequentemente virei-me para o PHP (a linguagem com que estou mais familiarizado) para criar um pequeno proxy para os pedidos (depois veio a tornar-se ainda mais util ao permitir-me criar copias locais das imagens por exemplo).
Mas deixemos-nos de paleio, passemos ao código:
// The url of the request
$url = "http://some.host/api/endpoint/request"
$cacheTimeout = 0 // No cache in this example
// Create the curl resource
$ch = curl_init();
// Set the url in curl
curl_setopt($ch, CURLOPT_URL, $url);
// Tell curl to return the reply as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Make the request
$output = curl_exec($ch);
// Free the curl resource
curl_close($ch);
if (!$output) {
echo "";
}
try {
//Set the proper headers (there's no cache in this example btw)
header('Cache-Control: no-cache, must-revalidate');
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $cacheTime) . ' GMT');
header('Content-type: application/json');
header('Content-Disposition: inline; filename=' . $file . '.json');
// Process the XML and convert it to JSON. Then output it.
$xml = new SimpleXMLElement($output);
echo json_encode(new SimpleXMLElement($xml->asXML(), LIBXML_NOCDATA));
} catch(Exception $e) {
echo 'Caught exception: ' . $e->getMessage() . '\n';
}
E cá está o código que faz um pedido GET usando o CURL a um serviço que retorna XML. Como bónus o código ainda converte de XML para JSON que IMHO é um formato muito mais jeitosinho de se trabalhar.
Notem que a gestão de erros aqui é praticamente inexistente e que devem sempre limpar o input do utilizador antes de fazer o que quer que seja com ele (mas isso é o ABC de programação web e já todos sabem).