Problema con petición POST

Iniciado por gato89, 16 Abril 2008, 21:36 PM

0 Miembros y 1 Visitante están viendo este tema.

gato89

Buenas! :D

estoy intentando desarrollar un script en php que me permita identificarme automaticamente en una segunda página, para lo que estoy utilizando esto:

<?php

$da 
fsockopen("localhost"80$errno$errstr30);

if (!
$da) {

echo "$errstr ($errno)<br />\n";

}else{

$salida "POST /www/php/prueba3.php HTTP/1.1\r\n";
$salida .= "Host: localhost\r\n";
$salida .= "Content-Length: 25\r\n\r\n";
$salida .= "dato1=lalala&dato2=lololo";
    
fwrite($da$salida);

while (!feof($da)) {
        
echo fgets($da128);
}
fclose($da);
}

?>



y el archivo prueba3.php es el siguiente:

<?php

print_r
($_POST);

?>


No se demasiado PHP, pero hasta donde llego, esto me debería funcionar bien, debería aparecerme el array con los datos que le paso en la cabecera HTTP...pero no, llevo toda la tarde intentandolo, y si lo hago mediante GET todo funciona a las mil maravillas, pero con POST no hay tu tía, no me reconoce las variables ni sus valores. ¿Alguien puede ayudarme?  :-(

Saludos!

дٳŦ٭



Con sangre andaluza :)


gato89

Se supone que lo que le mando es dato1=lalala&dato2=lololo, pero no me lo coge...Esta es la petición HTTP completa:


Código (php) [Seleccionar]
$salida = "POST /www/php/prueba3.php HTTP/1.1\r\n";
$salida .= "Host: localhost\r\n";
$salida .= "Content-Length: 25\r\n\r\n";
$salida .= "dato1=lalala&dato2=lololo";


De todas formas, me surgen otras dudas...porque la finalidad de esto es conseguir iniciar sesión automáticamente para poder acceder a páginas que no tendría permiso de no iniciarla, y aunque consiguiera pasarle los datos, y hacer la petición...no se cómo podría hacer para "mantener" el login en la proxima petición HTTP, que sería un simple GET.

Quiero decir, la finalidad de todo esto es entrar a una página que esta protegida por un nombre de usuario y una contraseña. El proceso es el siguiente: en login.php se postean los datos, ésta los envia a auth.php, y si todo es correcto, auth.php redirige a index.php ya identificado y con los derechos necesarios para ver la información pertinente.

Lo que quiero hacer yo con PHP es un script que todo eso lo haga solo, para obtener los datos de index.php (que es el que se necesita estar registrado para verlo) y manipularlos.

La verdad es que no se si esto se puede hacer con PHP únicamente, si alguien ha hecho algo parecido o tiene alguna idea...se agradecen. :rolleyes:

Saludos.

Diabliyo

Cita de: gato89 en 18 Abril 2008, 13:46 PM
Se supone que lo que le mando es dato1=lalala&dato2=lololo, pero no me lo coge...Esta es la petición HTTP completa:


Código (php) [Seleccionar]
$salida = "POST /www/php/prueba3.php HTTP/1.1\r\n";
$salida .= "Host: localhost\r\n";
$salida .= "Content-Length: 25\r\n\r\n";
$salida .= "dato1=lalala&dato2=lololo";


De todas formas, me surgen otras dudas...porque la finalidad de esto es conseguir iniciar sesión automáticamente para poder acceder a páginas que no tendría permiso de no iniciarla, y aunque consiguiera pasarle los datos, y hacer la petición...no se cómo podría hacer para "mantener" el login en la proxima petición HTTP, que sería un simple GET.

Quiero decir, la finalidad de todo esto es entrar a una página que esta protegida por un nombre de usuario y una contraseña. El proceso es el siguiente: en login.php se postean los datos, ésta los envia a auth.php, y si todo es correcto, auth.php redirige a index.php ya identificado y con los derechos necesarios para ver la información pertinente.

Lo que quiero hacer yo con PHP es un script que todo eso lo haga solo, para obtener los datos de index.php (que es el que se necesita estar registrado para verlo) y manipularlos.

La verdad es que no se si esto se puede hacer con PHP únicamente, si alguien ha hecho algo parecido o tiene alguna idea...se agradecen. :rolleyes:

Saludos.

Te refieres a ver el codigo PHP de ua pagina externa ??... jajajaj... es imposible, y es logico que no se puede !!... Simplemente porque el codigo se ejecuta e interpreta por PHP mediante el Servidor HTTP dentro del mismo Servidor, y elresultado de dichas interpretaciones o ejecuciones son mostradas al usuario !!, es por eso que no puedes bajarte una pagina PHP asi de facil :D !!...

La unica  forma de bajarte un PHP es:

- accediendo al hosting por FTP
- accediendo al hosting por HTTP (cpanel o algo asi...)

Lo de tu post anterior de PORQUEN no te muestra, es porque como el companero Ing_Amc dice, que le mandas a POST??... vaya, es logico que envias dato1=lalala&dato2=lololo, pero tu problema es que cuando invocas: print_r($_POST);, no especificas que valores consultas :D !!..

Esto no es huevo con papas, que de cucharazo sacas la papa, es algo como: establecer y pedir conforme al NOMBRE:


Trata algo asi:

echo $_POST["dato1"];

gato89

Hola Diabliyo, gracias por contestar, pero no me has entendido bien...

Lo primero, una pequeña aclaración. La función print_r($variable) lo que hace es imprimir todos los valores de un array, en este caso, $variable, por lo que haciendo print_r($_POST) debería mostrarme todas las variables que paso mediante POST y sus valores. ;)

Y lo segundo, lo que yo quiero, no es el codigo PHP de la pagina web, lo que quiero es la salida HTML, es decir, lo que quiero obtener son unos datos que solo son visibles si estas identificado, pero son HTML. :rolleyes:

En realidad, lo que necesito es que alguien me explique como podría identificarme automáticamente en una página web, y acceder a unos datos que estan en ella...se que esto se puede hacer, pues conozco numerosos autoclickers que lo hacen, y me interesa su modo de funcionamiento, pero la mayoría estan programados en C/C++ o PERL, y a mi me interesa hacerlo en PHP...mi propósito no es hacer un autoclicker, es únicamente obtener una lista de datos que solo esta disponible una vez identificado...

Saludos :)

Libransser

Recuerdo haber tenido algunos problemas mostrando ciertas variables con print_r(), aunque no recuerdo si me pasó alguna vez con $_POST. Pero estoy seguro que no he tenido problemas con la función var_dump() en lugar de print_r().

A mi no me ha quedado claro qué es exactamente lo que quieres hacer, pero si quieres un sistema de identificación entonces sería más o menos así: primero creas una página con un formulario de login, y envías los datos por POST a una segunda página donde revisas si son válidos, entonces si son válidos por medio de variables de sesión ($_SESSION) creas una variable donde especifiques que el usuario es válido, y para cada página a la que quieras acceder únicamente una vez identificado, antes que nada verificas si el valor de la variable de sesión indica que es un usuario válido y si lo es entonces muestras el contenido de la página, sino lo regresas a la página de login.

Arwing

gato89

Gracias Arwing, lo probaré con var_dump().

Exactamente lo que quiero hacer es un "autologin", el problema es que la web es externa. Es decir, el sistema de identificación de usuarios ya esta montado (en la web externa), para identificarse lo único que hace falta es introducir tu nombre de usuario y contraseña en login.php, y enviar el formulario, el cual va a auth.php, donde se comprueban los datos y de ser correctos se pasa a index.php ya logueado. Ahora bien, lo que yo quiero es identificarme, y luego entrar en datos.php, el problema es que si envio una peticion GET obtengo la pagina que obtendria sin estar identificado, y necesito la que se obtiene cuando estas identificado...

No se si me he explicado...si no es asi, dimelo y lo intento mejor  :D

Saludos

Libransser

#7
Cita de: gato89 en 20 Abril 2008, 01:02 AM
Exactamente lo que quiero hacer es un "autologin", el problema es que la web es externa. Es decir, el sistema de identificación de usuarios ya esta montado (en la web externa), para identificarse lo único que hace falta es introducir tu nombre de usuario y contraseña en login.php, y enviar el formulario, el cual va a auth.php, donde se comprueban los datos y de ser correctos se pasa a index.php ya logueado. Ahora bien, lo que yo quiero es identificarme, y luego entrar en datos.php, el problema es que si envio una peticion GET obtengo la pagina que obtendria sin estar identificado, y necesito la que se obtiene cuando estas identificado...

Es decir, ¿ya estás identificado y entras a datos.php desde otra url vía GET o ya en datos.php haces alguna petición vía GET? Pero a lo que puedo deducir, este datos.php está en otro sitio web diferente al de login.php y auth.php, ¿cierto? ¿Entonces tienes problemas de identificación debido a que son dos sitios completamente separados?

Entonces podrías hacer alguna especie de servicio web en la primera página para la segunda. Tener un script que haga la identificación y acepte datos desde otras páginas y devuelva una respuesta en XML o algo así.

Aunque viendo tu cabecera HTTP, ¿no falta especificar el Content-Type para los datos? ¿No estará mal construida?

Saludos
Arwing

gato89

#8
Uff menudo lío! jaja

Mira, tenemos un servidor, llamado Servidor 1, externo a mi. En ese servidor tenemos las páginas index.php, login.php, auth.php y datos.php. Además, la página datos.php esta "protegida", y si no inicias sesión en login.php, no te deja ver los datos. Y luego tenemos un Servidor 2, el mio, que no tiene nada que ver con Servidor 1. Lo que quiero hacer yo es desde Servidor 2, obtener una página de Servidor 1. Esto sería sencillisimo si no pidiera identificación, pero la pide, y ahí es donde me pierdo... Aquí te dejo un ejemplo real de una de las páginas en las que me interesa poder hacer esto. Por lo que he descubierto yo, el sistema de identificación funciona así:

index.php (pura paja, no hace falta para nada, lo que pasa es que es a la que te redirige auth.php de ir todo correctamente)
login.php (tiene un formulario con dos inputs, username y password, y un submit)
authenticate.php (comprueba el username y password recibidos mediante POST)
viewrefs.php (contiene los datos para los que hace falta estar identificado mediante el anterior sistema para ver)

entonces tu envias una petición POST con tus datos (username y password) a auth.php, comprueba que esten bien, y te redirige a index.php. Una vez hecho eso, teóricamente debería estar identificado en toda la web, y sin embargo si accedo a datos.php con una petición GET, me da la página que me daría si no estuviera identificado.

Mira, aquí tengo un ejemplo que funciona, no esta hecho con fsockopen(), sino con get_file_contents(), y así si que he conseguido que me funcione la petición POST:
Código (php) [Seleccionar]
<?php

$opciones 
= array('http' => array('method'  => 'POST',
'header'  => 'Content-type: application/x-www-form-urlencoded',
'content' => 'username=XXXXXXXXXXXXX&password=YYYYYYYYY'));

$contexto  stream_context_create($opciones);

$resultado file_get_contents('http://www.10bux.net/authenticate.php'false$contexto);

echo 
$resultado;

?>


ese script me devuelve la siguiente página:

Código (html4strict) [Seleccionar]
<html>


<head>
<title>10Bux.net - the fastest way to earn online</title>
<link rel="stylesheet" type="text/css" href="css.css">
<link rel="shortcut icon" href="http://10bux.net/images/10.gif">
</head>
<body leftmargin="0" topmargin="0">
<script language=javascript>
<!--
function ismaxlength(obj){
var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""
if (obj.getAttribute && obj.value.length>mlength)
obj.value=obj.value.substring(0,mlength)
}
//-->
</script><br />
<table width="900" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td class="maintop">

<table width="100%" border="0" cellpadding="0" cellspacing="0">

<tr>
<td width="37%" height="80" class="maintopright">
<div class="maintopright">&nbsp;&nbsp;<a href="index.php"><img src=top.png border="0" align="middle"></a></div>
</td>




<td width="63%" class="maintopright"><div align="right">
Guest [<a href=login.php>Login</a> | <a href=signup.php>Register</a>]</div></td><td width="1%" class="maintopright"><td>

</tr>

</table> </td>
</tr>
<tr>
<td align="left" valign="top" class="main"><div>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="900" align="center" valign="top" class="maincenter"><div style="margin-top:2; margin-bottom:2;">
<table width="100%" border="0" cellspacing="0" cellpadding="6">
<tr>
<td class="topper"><div align="center">

<a href=viewads.php>Surf Ads</a> | <a href=how.php>How</a> | <a href=faq.php>FAQ</a> | <a href=purchaseads.php>Advertise</a> | <a href=contact.php>Contact</a>

</div></td>

</tr>




<tr>
<td colspan="5" style="FONT-SIZE: 5px; BACKGROUND-COLOR: #FFFFFF; border-top:solid 1px #999999;">&nbsp;</td>
</tr>
</table>
<table width="95%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td class="midinfo">



Logging into 10Bux.net <b>XXXXXXXXXXXXX</b>...<br />
You are being redirected to the homepage..<br />
<a href='index.php'>Click here if you do not wish to wait..</a><br />
<meta http-equiv='refresh' content='5; url=index.php'>
                                        </td>
                                    </tr>

                </table><br>       



<table width="100%" border="0" cellspacing="0" cellpadding="6">

  <tr>
<td width="50%" class="footer"><div align="center">

<font color='#000000'>&copy; 10Bux.net</font> | <a href='tos.php'>Privacy</a> | <a href='tos.php'>TOS</a> | <a href='/forum/' target='_blank'>Forum</a> | <a href='banner.php'>Banner</a> | <a href='purchase35refs.php'>Un-referred Members</a> | <a href='upgrade.php'>Upgrade</a>

| <a href='adhistory.php'>Ad History</a>

| <a href='webstats.php'>Site Stats</a>

  </div></td>

  </tr>
</table> </div>

</td>
</tr>
</table>
</div>
</td>
</tr>

</table>

<noscript><center><div class="heading"><b>You must have javascript enabled to use 10Bux.net</b></div></center><br></noscript>
<noframes><center><div class="heading"><b>You must have frames enabled to use 10Bux.net</b></div></center><br></noframes>

</body>
</HTML>


lo que me interesa es esto:

Logging into 10Bux.net XXXXXXXXXXXXX...
You are being redirected to the homepage..
Click here if you do not wish to wait..


Viendo eso, pienso que si que me identifico con mi nombre de usuario y contraseña, el problema viene cuando me redirige a index.php, y al estar ubicado en mi servidor el script.php que realiza la petición anterior, pues logicamente en mi servidor(Servidor 2) no encuentra el tal index.php porque esta ubicado en Servidor 1.

En fin, que todo este lío es para conseguir ver viewrefs.php identificado, pero no se si lo estoy haciendo bien o si lo que estoy haciendo no me lleva a ningún sitio...:rolleyes:

Saludos.

PD: por cierto, la petición web si que debe estar bien hecha aunque no especifique Content-Type, porque el mensaje que me devuelve el servidor es el 200, todo OK..así que no entiendo porqué no me funcionará el otro método. :(

Libransser

Estaba pensando que después de todo, cuando estás haciendo una petición, el que la gestiona es el navegador, y para las sesiones (asumiendo que el sitio use sesiones) se guarda el identificador de la sesión en una cookie, o pasándola como variable en la URL (por GET). Quizá al utilizar file_get_contents pides la página pero obviamente el sitio no puede acceder a la cookie para recuperar el session ID, por lo que quizá tengas que mandárselo en la URL (pero de alguna forma también tienes que interceptar la cookie y leer el session ID asignado para usarlo). ¿Qué tal si usas en lugar de file_get_contents las funciones de CURL?

Arwing