Foros del Web » Programando para Internet » PHP »

Copiar una página recibida de un formulario

Estas en el tema de Copiar una página recibida de un formulario en el foro de PHP en Foros del Web. Hola gente. Ando probando cosas y me he encontrado con una duda: ¿Cómo puedo copiar una página recibida desde un formulario? Sólo se me ha ...
  #1 (permalink)  
Antiguo 05/04/2004, 08:46
 
Fecha de Ingreso: diciembre-2003
Ubicación: Salamanca
Mensajes: 123
Antigüedad: 14 años
Puntos: 2
Copiar una página recibida de un formulario

Hola gente.
Ando probando cosas y me he encontrado con una duda:
¿Cómo puedo copiar una página recibida desde un formulario?
Sólo se me ha ocurrido esto: (incrustado en javascript)

si el formulario es valido
{
<?copy(?>form.submit()<?,"copia.htm");?>
}

¿Cómo puedo hacerlo?
Muchas gracias.
dobeto
  #2 (permalink)  
Antiguo 05/04/2004, 11:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. a ver ..

Tu desde un formulario recibes una ruta a una página X.html (http://www.nose.tal/x.html) .. y quieres "copiar" (a donde?) esa página? ..

Bueno .. si creo haber entendido sería algo tipo:

Código PHP:
<?
// Se captura el buffer de salida de PHP
ob_start();
// Se llama a la página.
include($_GET['pag']);
// Lo que entregue esa página cae en la variable $html ...
$html=ob_get_contets();
ob_end_clean();

// Y un ejemplo de uso de $html .. generamos un archivo con el mismo nombre de la página que se llamó (sin rutas ni nada más .. para eso se usa basename()
$archivo=fopen(basename($_GET['pag']),'+W');
fwrite($archivo,$html);
fclose($archivo);
?>
Su uso:
nose.php?pag=http://www.forosdelweb.com
(o cambias el método por POST y usas un formulario .. o como gustes ..)

Con las funciones ob_xxx() se controla el buffer de salida de PHP y se captura lo que include() va a ejecutar tras llamar a tu página por su ruta ... OJO!! que no está validado nada sobre las rutas a incluir .. por lo mismo que hacer un http://www.pagina.tal .. es "inofensivo" .. una llamada relativa tipo nose.php podría ser peligroso ..

Un saludo,

PD: No sé si me dejo algo .. pero debería funcionar así .. no lo he probado y lo escribí "al vuelo".
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 05/04/2004 a las 11:45
  #3 (permalink)  
Antiguo 06/04/2004, 02:22
 
Fecha de Ingreso: diciembre-2003
Ubicación: Salamanca
Mensajes: 123
Antigüedad: 14 años
Puntos: 2
hola.
Lo primero gracias por responder.
Si te explico lo que quiero quizás me entiendas.
Yo accedo a una web que realiza cálculos (hipotecas concretamente) desde mi web (tengo los formularios).
Lo que quiero es quedarme con la página devuelta después de procesar el formulario, sin necesidad de tener que mostrarla.
Con copy copio la web que paso como parámetro.
Luego, jugando con el fichero resultante me quedo con la parte en la que se muestra la información y la mando por e-mail desde mi página.
Supongo que si no trata las variables como $_POST, podria pasarlas en la URL ¿puedo hacer eso? .Lo probaré.
Pero... ¿cómo hago para llamar a la página si ha de enviar un formulario?

Muchas gracia
  #4 (permalink)  
Antiguo 06/04/2004, 07:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
La técnica sería lo mismo que el primer bloque de código que puse de ejemplo donde se llama a tu página y la almaceno en una variable ..

Con esa variable en ese punto puedes (despues de procesarla como corresponda) enviarla por e-mail directamente sin necesidad de almacenarla (si no es necesario) en tu servidor ..

La petición de la página con X parámetros por "GET" que es lo que en principio (si usas el include()) necesitas.

Tu/s formulario/s pueden enviar por GET o POST los datos a ese script de proceso y tu sólo tendrás que componer el URL en el include con tus variables:

include ("http://www.nose.tal/nose.tal?variable=$_POST['variable']");
y el resto ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 06/04/2004, 09:08
 
Fecha de Ingreso: diciembre-2003
Ubicación: Salamanca
Mensajes: 123
Antigüedad: 14 años
Puntos: 2
Creo que te entiendo... voy a probar.
Mira lo que hago es esto:
-Alguien me pide un cálculo.
-desde mi página mando un formulario a otra web

-- --ese otro servidor duvuelve la página completa con los
| cálculos realizados
|
|-----la página la recibo yo

-ahora yo tengo el resultado, busco los resultados y borro el resto del código recibido, así puedo procesar la información recibida como quiera.

Ya te contaré.
Gracias.
dobeto
  #6 (permalink)  
Antiguo 07/04/2004, 01:51
 
Fecha de Ingreso: diciembre-2003
Ubicación: Salamanca
Mensajes: 123
Antigüedad: 14 años
Puntos: 2
Hola otra vez...
Hay algo que no consigo entender.
La página que procesa mi formulario, que no es la mía, ha de recibir las varables por POST, y yo sólo puedo pasarlas en la URL.
¿No se puede hacer que algo?
¿valdría algo así?:

Todo esto en mipágina

<formulario accion="www.lapaginadelotro.php">
<dato1>
<dato2>
<boton nom="enviar" onclick="valido_formulario()">
</formulario>
.................................................. ..........
<script>
funcion valido_formulario
{
si el formulario está bien
{
<?include(?>form.submit()<?);?>
}
}
</script>
.................................................. ..........

Que comedura de tarro
  #7 (permalink)  
Antiguo 07/04/2004, 07:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No es así como lo planteas por qué necesitas que sea tu script PHP el que llame y le pase las variables que corresponda a esa página externa para poder "capturar" lo que esta entregue y procesarlo por tu script, enviar esos datos por e-mail o lo que corresponda.

Tienes que tener un formulario igual al que usa esa www.paginanosecuentos.com/formulario.html

en tu servidor y apuntar el "action" al script que vas a tener en tu servidor que a su vez llama (pasandole las variables que requiera) a la página que procesa los datos del formulario del servidor remoto (donde apunte el action= de ese fomulario de ese servidor remoto).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 07/04/2004, 12:31
 
Fecha de Ingreso: diciembre-2003
Ubicación: Salamanca
Mensajes: 123
Antigüedad: 14 años
Puntos: 2
Creo que abandono el tema

Si el script que procesa los datos del formulario busca dentro de $_POST[] no podrá encontrar las variables si no las envío por un formulario...
El problema es ¿como paso las varibles desde mi script para que la página a la que llamo las reciba por $_POST?
Hasta este punto está todo visto y no hay problemas.
Bueno, que si no hay solución fácil, me rindo, que no quiero ser pesado
Muchas gracias por tus ratos
Saludos desde Salamanca.
dobeto
  #9 (permalink)  
Antiguo 07/04/2004, 13:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. el "include()" con la llamada a tu pagina remota:

nose.tal?variable=valor .. se emiten dichas variables por GET .. si esa página nose.tal requiere que sea por POST tendrás que usar parte de protocolo HTTP para simular ese paso de variables por POST (sin formulario) o bien las extensiones (librerias) cURL (www.php.net/curl) .. pero, antes de meterte con eso, prueba por "GET" por que hay muchas aplicaciones que no filtran el método (PHP si, si usas los arrays superglobales .. pero depende del programador que lo hizo .. otros lenguajes no lo distinguen)

Un ejemplo simple para probarlo:

Código PHP:
<?
header 
("location: [url]http://www.nose.nose/proces.tal?variable=valro[/url]");
?>
si esa llamada directo a tu página externa (la que apunte en el action de ese formulario que usas si ingresas por esa web ...) te arroja los resultados esperados .. ya puedes usar la técnica que indiqué más arriba .. sino, .. tendrás que simular el método POST por HTTP directo.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 07/04/2004, 17:27
 
Fecha de Ingreso: diciembre-2003
Ubicación: Salamanca
Mensajes: 123
Antigüedad: 14 años
Puntos: 2
Por GET no recoge las variables
Lo de utilizar la librería CURL se me va de las manos...
Creo que me he metido en un laberinto.
¿Cómo se simula el POST?
Gracias.
  #11 (permalink)  
Antiguo 08/04/2004, 07:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Con las librerias cURL puedes gestionar el envio de variables a cualquier página (por HTTP o incluso HTTPS) por el método que gustes .. (pero requiere de esa librería instalada como extensión para PHP en tu servidor ..)

La otra alternativa es hacerlo a "bajo nivel" es decir .. directamente implementando parte del protocolo HTTP para tal fin (que es lo que hace en el fondo las cURL):

Ejemplos:

función fsokopen() .. Tienes ejemplos en los comentarios de los usuarios completos (para usar POST o GET)
http://www.php.net/function.fsockopen

Este permite hasta autentificarte (por HTTP) si fuese necesario ...
http://www.weberdev.com/get_example.php3/1737

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 17/04/2004, 13:14
 
Fecha de Ingreso: diciembre-2003
Ubicación: Salamanca
Mensajes: 123
Antigüedad: 14 años
Puntos: 2
conseguido!!!

Bueno... he tenido que leer mucha documentación, pero lo tengo.
Muchas gracias, cluster, tus enlaces son los que me han dado la solución.
Los comentarios de http://www.php.net/function.fsockopen están muy bien, aunque me ha tocado jugar con ellos, pues por si mismos no van así que un poco de cada y resuelto.

Os dejo el código que me funciona:

<?
$dato= "caracola"; //el dato que debía de ir en el formulario
$long= 4+ strlen($dato); //de mi cosecha
$host= "localhost"; //el host
$path= "/curso2/pruebas/form.php"; //dirección a la página que procesa el formulario

$fp = fsockopen ($host, 80); //conectamos

fputs ($fp, "
POST ".$path." HTTP/1.1
Host: ".$host."
Content-Length: ".$long."
Content-Type: application/x-www-form-urlencoded
Connection: Close

//aqui se se escribe el dato que debía ir en el formulario
dat=".$dato);

//guardo el resultado
$tmp_body = "";
while (!feof($fp))
$tmp_body .= fgets($fp, 4096);

fclose($fp);

//me guardo el resultado para manipularlo posteriormente
$id_fichero= @fopen("copia.htm","a");
fwrite($id_fichero,$tmp_body);
fclose($id_fichero);

//mensaje devuelto al navegador
echo "acabado ";
?>

Muchísimas gracias de nuevo.
dobeto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:44.