Feed RSS esterni tramite proxy
Abbiamo visto, in un articolo precedente che per ottenere dati dallo stesso dominio su cui facciamo girare il nostro script non ci sono problemi, mentre per inoltrare richieste all'esterno, come nel caso più tipico dei feed RSS, bisogna trovare degli escamotage.
La tecnica più comune per utilizzare documenti XML esterni è quella di creare un proxy sul nostro dominio, ovvero uno script lato server che faccia la richiesta e presenti il risultato al client. Il risultato è che il nostro script in questo caso accede ad una risorsa che si trova sullo stesso dominio e quindi non ha alcun problema.
Proxy ASP.NET
Ecco un esempio di proxy fatto in ASP.NET - C#, che chiamiamo proxy.aspx
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Net" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
string url = Request["url"];
string result = null;
try
{
WebClient client = new WebClient();
result = client.DownloadString(url);
Response.Write(result);
}
catch (Exception ex) { } // gestire l'errore
}
</script>
Naturalmente è molto semplice, ad esempio manca la propagazione dell'header originale, ma già può essere utile per piccoli esempi. Per ottenere il documento esterno è sufficiente richiamare la pagina e passare la URL come variabile nella QueryString.
http://mioserver.com/proxy.aspx?url=altroserver.com/doc.xml
Proxy PHP
Naturalmente, tramite proxy possiamo servire qualunque tipo di documento XML e non solo feed. Ecco un esempio semplice di proxy in PHP (chiamiamolo proxy.php
), che sfrutta le librerie cURL:
<?php
$url = $_GET['url'];
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
$data = curl_exec($ch);
curl_close($ch);
echo $data;
?>
Per ottenere il contenuto desiderato richiamiamo lo script e gli passiamo la URL come variabile nella QueryString.
http://mioserver.com/proxy.php?url=altroserver.com/doc.xml
Anche qui ci siamo limitati ad un semplice passaggio di dati, un esempio di proxy già pronto da utilizzare in PHP è php-simple-proxy, che restituisce il contenuto della pagina richiesta in formato JSON.