.
     
» Normal Links          

Sesiones+sessions+python

14 Abr 2009 | Escrito por: lopz | En: Python
Sesiones+sessions+python

Hola

No sé si el título describa lo que explicaré a continuación, ya que no sé si es el correcto, pero en fin, para mí si lo es xD

En esta entrada aprenderemos a manejar sesiones http utilizando python, no sé por que pero me a dado por usar MUCHO la librería httplib de python, según se en la que están basadas urllib, urllib2 y urllib3 esta última está en google code, y bueno se podrían usar estas otras que facilitan las cosas a la hora de manejar cookies con python, pero si las otras están basadas en esta entonces por que no se podría implementar con esta librería?

Bueno hace tiempo cuando estaba empezando en python siempre me llamaba la atención poder hacer tonterías con webs+python, osea, interactuar con ellas, realizar búsquedas en google, en otras páginas lo mismo, extraer datos de una y otra página, navegar por sus links, vamos, un crawler, spider o como le llamen ustedes todo funciona bien hasta que quieres automatizar alguna tarea en una página donde tienes que iniciar sesión con un user y pass para poder navegar por los demás links, aquí es donde entra el uso de sesiones, para realizar este tipo de cosas lo único que hay que hacer es "imitar" lo que hace el usuario en conjunto con su navegador, enviar los MISMOS parámetros que pide la web (request) entonces la página pensará que eres un navegador y te dará acceso como si lo haría un humano, vamos, hacer lo mismo pero con código escrito en cualquier lenguaje, pero como a mí me encanta python lo hice en este jeeeeje, para entender esto es necesario saber lo básico de como funciona un servidor http y un navegador y como dije solo queda imitarlo.

En esta entrada veremos como hacer esto con una página que encontré por ahí no fue suerte mas bien por pasar el rato escribiendo algo referente a ella sea de paso, la página es http://www.futbolreto.com ahora bien para poder probar nuestro pequeño robot necesitamos crearnos una cuenta en dicha página, no lleva más de 1 minuto.

Hagamos de cuenta que ya tienes un user y pass válido para la página, ahora solo quedará ingresar a la página con el navegador y como se han podido dar cuenta es un juego, una trivia donde hay que responder preguntas referentes al futbol y estas tienen un tiempo para responderlas, es una pregunta y son varias respuestas de las cuales solo una es válida y entonces lo que vamos a hacer es eso, simular todo, desde el login hasta poder recibir las trivias.

Ahora que he explicado como va la cosa estaremos listos para modificar el script con tu user y pass, configurar algunos datos: tu user y pass son urgentes, luego la categoría, y el número de trivias que tendremos resueltas por el robot.

No pasaré a hablar más del error de la página ya que este post no va para eso, si no para mostrar como mantener la sesión al navegar por diferentes links de la página como se puede notar en el script.

Ya, mucho blah blah y poca acción, empecemos por modificar el script como ya les había indicado y lo ponen a correr y notarán que les imprime la pregunta y su respuesta correcta, todo esto manteniendo la sesión utilizando la COOKIE que es lo importante, como ve, primero realizo una request simple luego obtengo la cookie, y hago el POST enviado el user y pass y el servidor nos responderá con la cookie de nuestra sesión que es la que usaremos siempre para cualquier request.

Esto se puede hacer para cualquier página web, inclusive para las que tienen captchas, pero en este caso solo necesitas logearte con el navegador y coger la cookie que nos envía el server y utilizar esa para los demás request, es así como hice esos bots para metroflog y fotologs, ya que estos utilizan captchas para iniciar sesión, pero todo eso fue para probar y distraerme un rato con los "amigos/as" que joden con que le firmen el puto metro que tienen, así les llenas de spam los comentarios y les agotas sus comentarios y no joderán hasta el otro día claro está jaja

Bueno me pasé a otro tema, siempre suelo ser así jeje. ya, ahora paso a pastear el script que solo necesitan copiarlo a un fichero de texto y ponerlo a correr, como siempre digo los post que pongo aquí son para personas que ya tienen la idea de que es python, como ejecutar un script, etc, vamos, con algo de noción de informática.


Code:

#!/usr/bin/python
# -*- coding=UTF-8 -*-

#       Copyright 2009 Jorge J. Lopez C. <lowlifebob[at]gmail.com>
#
#       This program is free software; you can redistribute it and/or modify
#       it under the terms of the GNU General Public License as published by
#       the Free Software Foundation; either version 2 of the License, or
#       (at your option) any later version.
#
#       This program is distributed in the hope that it will be useful,
#       but WITHOUT ANY WARRANTY; without even the implied warranty of
#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#       GNU General Public License for more details.
#
#       You should have received a copy of the GNU General Public License
#       along with this program; if not, write to the Free Software
#       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#       MA 02110-1301, USA.

import httplib

USER = "tuuser"  # username
PWD = "tupass" # password
CAT = "4"
"""
   CAT: [option]
   
   [options]:   
   1 = Colombiano
   2 = Copa Mundo
   3 = Alemania 2006
   4 = Argentino
"""
RESP = 5 # Numero de trivias



def download(dom, url, params=None, ref=False,
          cookie=None, ctype=False, clength=False):

   headers = {
            "User-Agent": "Mozilla/5.0 (X11; U; Linux i686; es-ES; \
             rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3",
            "Accept": "text/html,application/xhtml+xml,application/xml;q=\
            0.9,*/*;q=0.8",
            "Accept-Language": "es-es,es;q=0.8,en-us;q=0.5,en;q=0.3",
            "Accept-Charset": "UTF-8,*",
            "Keep-Alive": "300",
            "Proxy-Connection": "keep-alive"
            }
   if ref:
      headers["Referer"] = "http://www.futbolreto.com/trivia//index.php"
   if cookie:
      headers["Cookie"] = cookie
   if ctype:
      headers["Content-Type"] = "application/x-www-form-urlencoded"
   if clength:
      headers["Content-Length"] = len(params)      
   
   conn = httplib.HTTPConnection(dom, 80)
   if params:
      conn.request("POST", url, params, headers)
   else:
      conn.request("GET", url, params, headers)
   resp = conn.getresponse()
   return resp
   
def url_split(url):
   slashes = url.find("://")
   if slashes == -1:
      slashe = url.find("/")
      dom = url[:slashe]
      url = url[slashe:]
      return dom, url
   else:
      url = url[slashes + 3:]
      return url_split(url)

def search_between(ini, end, html):
   try:
      html = html[html.index(ini) + len(ini):]
      html = html[:html.index(end)]
      return html
   except:
      return None

if __name__ == "__main__":
   
   uri = "http://www.futbolreto.com/trivia//include/login.php"
   params = "loginname=" + USER + "&pass=" + PWD + "&log=Ingresar"

   dom, url = url_split(uri)
   resp = download(dom, url)

   cookie = resp.getheader("set-cookie")
   cookie = cookie[:cookie.find(";")]
   resp = download(dom, url, params, True, cookie, True, True)

   url = "/trivia/index.php?open=aktiv"
   download(dom, url, None, True, cookie)
   url = "/trivia/index.php?open=secure"
   download(dom, url, None, False, cookie)

   url = "/trivia/cargaswf93669366dave.php"
   params = "llama=1&onLoad=%5Btype%20Function%5D"
   xml = download(dom, url, params, False, cookie, True, True).read()
   daves = search_between("na=", "&&uids", xml)
   url = "/trivia/cargadordepreg.php"
   params = "categoria=categoria" + CAT +"&hsDaVeStOnE=" + daves

   for i in range(RESP):
      xml = download(dom, url, params, False, cookie, True, True).read()
      # parsing
      print ">", search_between("unta>", "</pregunta>", xml)
      print search_between("esta1>", "</respuesta1>", xml)


Bueno, es todo el código, cabe destacar que es solo una prueba ya que ahí no capturo ningún error ni nada que pueda suceder, eso ya va para el que quiera usarlo en algún proyecto de verdad y no sea un chiste como esto.

Como siempre dejaré una pequeña SS del script funcionado.



Espero que a alguien le sirva para base de manejo de sesiones con python, y claro, la idea está hecha para poder divertirnos un rato con esa página jugando a lo informático jeje

Saludos!!

PD cualquier duda por favor un comment!


   

 
lopz4 Sep 2009
Hola

Martín, así es, están los equipos colombianos entre otros, por cierto ¿tú tienes blog?

Saludos!

martyn-dev15 Ago 2009
Ehy! Que bien, esta con equipos Colmbianos Saludos lopz.

lopz17 Abr 2009
Hola

tabris, qué parte no entendiste ?
Es un script que se logea en una página de juegos y navegas por los links con la sesión, ya que si no lo haces no podrás acceder a determinados lugares.
Si preguntas te trataré de ayudar en lo que pueda

Saludos!

tabris15 Abr 2009
no entendi muy bien pero se ve q esta interesante sigue postendo

  Pagina 1 de 1
 

Envia tu Comentario:
Los comentarios ofensivos o fuera de lugar seran borrados.
BBcode: on
Smilies: on
Nick:


smile wink surprised tongue lol sad angry cry 



Status: Comentario aun no enviado


Powered by MySql' Powered by PHP XHTML Valido CSS Valido

Tiempo de carga del servidor: 0.0333