Buenas, aveces necesitamos crear nuestra aplicaciones que se conecten a una web o varias Webs, para recolectar información o enviar información, quizás para recolectar y enviar información. Algunas paginas nos facilitan este trabajo creando una Api para su sitio web, un ejemplo puede ser Pastebin, Flickr, Imageshack, Twitter, etc...
Aveces no es el caso y debemos realizar todo manualmente.
Bueno primero que nada debemos examinar la web. Debemos tener en cuenta:
- Los parámetros necesarios a mandar a la web.
- El código de repuesta de la pagina, para poder tomar decisiones.
- Los datos que nos envían la pagina, como Cookies.
Algo muy importante que debemos tener en cuenta, es organizar nuestras ideas antes de comenzar. Cual es el objetivo de nuestra aplicación, los pasos necesarios para poder realizar lo, etc...
En este caso, mi objetivo es loguearme (Iniciar session) en una web y aparecer como logueado.
Primero trato de loguearme con datos falsos, para ver como responde la pagina.
login.php
Miro los headers:
Me logueo de nuevo, pero esta vez con los datos verdaderos:
Miro los dos headers y busco una diferencia, para diferenciar si me he logueado correctamente o falso, así para luego tomar decisiones en mi aplicación.
Puedo ver que cuando inicie session con mis datos correcto, el código de respuesta fue 302 y cuando ingrese datos falso el código de repuesta fue 200. También que al iniciar session correctamente, el servidor me manda una Cookie que es PHPSESSID.
Al iniciar session correctamente, me redirecciona al index.php
Paso a crear mi aplicación, que realizara lo siguiente:
Enviar una petición POST al archivo login.php, con la query usuario que contendrá el nombre de usuario y la query password que contendrá el password.
Luego verifico que los datos sean correctos, si el código de repuesta es 302 es porque los datos han sido correcto y si el código de repuesta es 200 es porque los datos introducidos han sido falso. Si los datos han sido correcto, capturo la Cookie que manda el servidor para luego usarla en las peticiones GET o POST.
Bueno aquí la un ejemplo de un pequeño script escrito en Perl
#!/usr/bin/perl -w
use strict;
#Modulos necesarios
use LWP::UserAgent;
use HTTP::Request::Common;
my $url_login = 'http://127.0.0.1/pruebas/login.php';
my $usuario = $ARGV[0];
my $password = $ARGV[1];
my $ua = new LWP::UserAgent;
$ua->agent("Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16");
my $response = $ua->request(
POST $url_login, #Realizo la peticion POST
{
usuario => $usuario,#Le asigno el valor de la variable $usuario a la query usuario
password => $password,#Le asigno el valor de la variable $password a la query password
});
#Verificos que los datos ingresados sean correcto
#para esto verifico que en el codigo de repuesta
#sea 302
if($response->status_line =~ /302/)
{
print "Datos correctosn";
print "Cookie mandada por el servidor -> ".$response->header('set-cookie')."n";
exit;#Finalizo el script
}
#Si ah llegado hasta aqui, es porque los datos no son verdaderos
Salida:
<?php
$url_login = 'http://127.0.0.1/pruebas/login.php';
$usuario = 'yoya';//Usuario
$password = 'admin';//Password
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16');
curl_setopt($ch, CURLOPT_URL, $url_login);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_HEADER,true);
/*
Le asigno el valor de la variable $usuario a la query usuario
Le asigno el valor de la variable $password a la query password
*/
curl_setopt ($ch, CURLOPT_POSTFIELDS, "usuario=".$usuario."&"."password=".$password);
$result = curl_exec($ch);
/*Verificos que los datos ingresados sean correcto
para esto verifico que en el codigo de repuesta
sea 302*/
if(curl_getinfo($ch, CURLINFO_HTTP_CODE) == "302")
{
preg_match("/Set-Cookie:s*([w=]+)[s;n]*/i", $result, $cookie_valor);
echo "Datos correctos<br>";
echo "Cookie mandada por el servidor -> ".$cookie_valor[1]."<br>";
exit;
}
echo "Datos introducidos incorrecto<br>";
exit;
?>
Salida:
Source para practicar:
<?php
session_start();
if(!empty($_POST['usuario']) && !empty($_POST['password']))
{
$usuario = $_POST['usuario'];
$password = $_POST['password'];
if($usuario == 'yoya' && $password == 'admin')
{
$_SESSION['conectado'] = 1;
header('Location: index.php');
}
}
?>
<p><h1>Ingresar</h1></p>
<form name="login" method="POST" action="login.php">
<p>Usuario:<br><input type="text" name="usuario"></p>
<p>Password:<br><input type="password" name="password"></p>
<p><input type="submit" value="Enviar"></p>
</form>
Saludos.
12:55