¿Cómo escribo un simple proxy transparente de PHP?

Necesito hacer un script proxy que pueda acceder a una página oculta detrás de una pantalla de inicio de sesión. No necesito el proxy para “simular” el inicio de sesión, en su lugar, el HTML de la página de inicio de sesión debe mostrarse normalmente al usuario, y todas las cookies y los datos HTTP GET / POST deben fluir a través del proxy al servidor, por lo que el inicio de sesión debe ser auténtico.

No quiero el nombre de usuario / contraseña, solo necesito acceder al código fuente HTML de las páginas generadas después de iniciar sesión.

¿Alguien aquí sabe cómo se puede lograr esto? ¿Es fácil?

Si no, ¿por dónde empiezo? * (Actualmente estoy usando PHP) *

De lo que estás hablando es de acceder a las páginas para las cuales necesitas autenticarte.

Aquí hay algunas cosas que deben establecerse:

  • no puede ver esas páginas sin autenticarse.
  • si el sitio web (cuyo código HTML desea ver) solo admite el inicio de sesión web como método de autenticación, deberá simular el inicio de sesión enviando un (nombre de usuario, contraseña) a través de POST / GET, según sea el caso.
  • si el sitio web le permite autenticarse de otras maneras (como LDAP, Kerberos, etc.), entonces debe hacerlo

El punto clave es que no puede obtener acceso sin autenticarse primero.

En cuanto al lenguaje, es bastante factible en PHP. Y como sugieren las tags en la pregunta, estás usando las herramientas adecuadas para hacer ese trabajo.

Una cosa que me gustaría saber es, ¿por qué lo llaman un “proxy”? ¿Quieres servir el contenido a otros usuarios?

EDITAR: [actualización después del comentario]

En ese caso, use phproxy. Hace lo que quiere, junto con una serie de otras características.

Haga que su script PHP solicite la URL que desea, y vuelva a escribir todos los enlaces y forme acciones para señalar su script php. Al recibir solicitudes para la secuencia de comandos que tienen un parámetro de URL, reenvíelo al servidor remoto y repita.

No podrá ver todas las solicitudes de JavaScript (a menos que haya implementado una porción de JavaScript de su “proxy”)

Por ejemplo: el usuario escribe http://example.com/login.php en su formulario proxy.

enviar al usuario a http://yoursite.com/proxy.php?url=http://example.com/login.php

asegúrese de urlencode el parámetro ” http://example.com/login.php

En http://yoursite.com/proxy.php , realiza una solicitud HTTP a http://example.com/login.php

$url = $_REQUEST['url']; // make sure we have a valid URL and not file path if (!preg_match("`https?\://`i", $url)) { die('Not a URL'); } // make the HTTP request to the requested URL $content = file_get_contents($url); // parse all links and forms actions and redirect back to this script $content = preg_replace("/some-smart-regex-here/i", "$1 or $2 smart replaces", $content); echo $content; 

Tenga en cuenta que / some-smart-regex-here / i es en realidad una expresión regular que debe escribir para analizar enlaces, y tal.

El ejemplo solo representa al cuerpo HTTP, es posible que desee proxy los encabezados HTTP. Puede usar fsockopen () o funciones de flujo de PHP en PHP5 + (stream_socket_client () etc.)

Puedes ver http://code.google.com/p/php-transparent-proxy/ , lo hice porque me estaba haciendo la misma pregunta y decidí hacer una. Está bajo licencia BSD, así que diviértete 🙂

Recomendaría usar Curl (biblioteca php que tal vez debas activar en tu php.ini). Se usa para manipular sitios web remotos, manejar cookies y cada parámetro HTTP que necesites. Tendrá que escribir su proxy en función de las páginas web a las que acierta, pero hará el trabajo.