AS3 – Cargar Assets Usando un Proxy

Publicado por Iván Gajate el 26 de abril de 2011 en AS3, Flash

Cuando tratamos de cargar imágenes o xmls de otros dominios, nos encontramos con el problema de que por seguridad no es posible hacerlo directamente. Si tenemos acceso al otro dominio, podemos usar el “crossdomain.xml”, pero si no, podemos recurrir a un proxy.

Para entenderlo mejor, aquí hay un tutorial muy explicativo.

La forma de saltarse el problema es cargar las cosas con un php intermedio que se encuentra en nuestro servidor (proxy), y que sencillamente nos devuelve lo que le hemos pedido en el formato que corresponde. Así, con este php en nuestro servidor (proxy.php):

<?php
 
header("Access-Control-Allow-Origin: *");
 
 if (isset($_GET['url'])) {
	$url = urldecode($_GET['url']);
} else {
	die('error=1');
}
 
$ext = pathinfo($url, PATHINFO_EXTENSION);
 
switch ($ext) {
	case "jpg":
		header('Content-Type:image/jpeg');
		readfile($url);
		break;
	case "gif":
		header('Content-Type:image/gif');
		readfile($url);
		break;
	case "png":
		header('Content-Type:image/png');
		readfile($url);
		break;
	default:
		header('Content-Type:text/html; charset=utf-8');
		readfile($url);
		break;
	}
?>

En lugar de llamar a:

http://www.otrodominio.com/imagen1.jpg

Lo haremos a:

 http://www.midominio.com/proxy.php?url=http://www.otrodominio.com/imagen1.jpg

Y si queremos cargar un HTML completo de otra página, solo tenemos que tener cuidado si lleva variable en la url:

var proxy = 'proxy.php?url=' + encodeURIComponent('http://www.otrodominio.com/search.php?q=programacion+as3');  //Para evitar la ?
 
jQuery.get(proxy, resultadosOk);
 
// Formateo el resultado
function resultadosOk(data) {
 
}

De esta manera nos saltaremos el problema del sandbox 🙂

 

2 comentarios para “AS3 – Cargar Assets Usando un Proxy”

  1. Muy útil, a mi este workarround me ha sacado del apuro en alguna ocasión.
    Lo único malo que hay que tener en cuenta es que el tráfico se duplica y la carga se demora un poco más de lo normal, pero es un salvavidas.