• HomePagina Inicial
  • Blog Mis cosillas
  • Portfolio Mis trabajos
  • Acerca deeste blog y su autor
    • Sobre Mi 
    • Oridoki 
  • ContactarFormulario
  • Categorias

    • Blog
      • Control de Versiones
        • GIT
      • Diseño
      • Frameworks
        • CakePHP
        • CodeIgniter
      • JavaScript
        • EXT JS
        • JQuery
      • Magento
      • Maquetación
        • CSS
        • HTML
      • MiniCodes
      • MySQL
      • PHP
      • Proyectos
      • TextMate
      • Varios
      • Wordpress
    • Portfolio

AJAX Entre Dominios – Proxy PHP

Posted by Adrià Cidre Categories: Blog, JavaScript, PHP Tags: ajax, cross-domain, entre dominios, Java Script

Javascript tiene una limitación por la que no se permite hacer llamadas AJAX entre dos dominios distintos. Como todas las limitaciones se ha superado de una forma u otra.

Hoy vamos a ver como superar esta limitación mediante un proxy PHP, y en los siguientes días veremos como hacerlo con CSSHTTPrequest y con JSONP.

Bien, vamos al trapo. Para empezar tenemos que desarrollar un proxy en PHP que haga las peticiones entre dominios en el lugar de Javascript, de este modo podemos llamar desde Javascript a nuestro script ‘proxy.php’ sin salir del dominio actual.

	define ('HOSTNAME', 'http://www.dominiodestino.com/');
	$path = ($_POST['path']) ? $_POST['path'] : $_GET['path'];
	$url = HOSTNAME.$path;
	$session = curl_init($url);

	if ($_POST['path'])
		{
		$postvars = '';
		while (list($clau, $valor) = each($_POST))
			{
			$postvars .= $clau.'='.$valor.'&';
			}
		curl_setopt ($session, CURLOPT_POST, true);
		curl_setopt ($session, CURLOPT_POSTFIELDS, $postvars);
		}
	curl_setopt($session, CURLOPT_HEADER, false);
	curl_setopt($session, CURLOPT_RETURNTRANSFER, true);

	$xml = curl_exec($session);
	header ("content-type: text/xml");

	echo $xml;
	curl_close($session);

Podemos hacer peticiones AJAX a este script como si se las hiciéramos al dominio de destino, simplemente teniendo en cuenta que debemos pasar la variable path con el path del dominio de destino.

En prototype la petición sería:

	new Ajax.Request("proxy.php", {
	  method: 'post',
	  parameters: "&path=index.php&text=hola",
	  onSuccess: function(transport){
	  	alert(transport.responseText);
	  }
	});

Es una solución funcional pero deja bastante que desear, puesto que no solo estamos consumiendo ancho de banda del cliente, sino que además lo estamos haciendo de nuestro servidor, por lo que las peticiones tardarán ‘el doble’ en responder.
Afortunadamente y como comentaba antes no es la única solución, por eso veremos cuales són las otras en los siguientes posts.

Share This Post!

Subscribe to our RSS feed. Tweet this! StumbleUpon Reddit Digg This! Bookmark on Delicious Share on Facebook

3 Responses to AJAX Entre Dominios – Proxy PHP

  1. A mi me parece que, aunque es verdad que tarda un poco más, es la mejor solución ¿Por qué?
    Desde el punto de vista de programador deseo proteger mi código y al mismo tiempo permitir que se use por distintos servidores.
    Además, con un proxy PHP puedo crear un eficiente sistema de suscripciones. También me ahorro tener que copiar tanto código en los sitios pudiendo hacer llamadas a un repositorio de APIs personales.

    Posted on 16/06/2009 at 14:56
    |
    Damian says
  2. Después de tres días peleando con flex y su fichero de politica en dominio destino crossdomain.xml, para poder acceder a un rss.xml. Llegue a esta página. Mil gracias al creador de este script.
    Funcionó correctamente con una instrucción en flex

    Por si alguien lo necesita.

    Posted on 01/03/2010 at 02:18
    |
    XemaX says
  3. Hola XemaX, actualmente existe la posiblidad de hacerlo por ejemplo gracias a la función getJSON de JQuery, sin necesidad de sobrecargar la conexión del servidor web. Te recomiendo que lo pruebes no te defraudará! Un Saludo!

    Posted on 01/03/2010 at 08:43
    |
    Adrià Cidre says

Deja un comentario Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Search our website

  • Inicio
  • Blog
  • Consultor Web
  • Contactar
  • E-Commerce
  • Oridoki
  • Outsourcing
  • Portfolio
  • Sobre Mi
  • Social Media
© Adrià  Cidre Jugo - 2011