¿Cómo se puede iniciar sesión en un foro phpBB3 a través de un script de Python usando urllib, urllib2 y ClientCookie?

StackOverflow https://stackoverflow.com/questions/112768

  •  02-07-2019
  •  | 
  •  

Pregunta

(ClientCookie es un módulo para el manejo (automático) de cookies: http://wwwsearch.sourceforge.net/ClientCookie)

# I encode the data I'll be sending:
data = urllib.urlencode({'username': 'mandark', 'password': 'deedee'})

# And I send it and read the page:
page = ClientCookie.urlopen('http://www.forum.com/ucp.php?mode=login', data)
output = page.read()

El script no inicia sesión, sino que parece ser redirigido a la misma página de inicio de sesión y le solicita un nombre de usuario y contraseña.¿Qué estoy haciendo mal?

¡Cualquier ayuda sería muy apreciada!¡Gracias!

¿Fue útil?

Solución

¿Has intentado buscar primero la página de inicio de sesión?

Yo sugeriría usar Alteración de datos para echar un vistazo a exactamente lo que se envía cuando solicita la página de inicio de sesión y luego iniciar sesión normalmente usando un navegador web desde un nuevo comienzo, sin cookies iniciales, para que su script pueda replicarlo exactamente.

Ese es el enfoque que utilicé al escribir lo siguiente, extraído de un script que necesita iniciar sesión en un foro de Invision Power Board, usando cookielib y urllib2; puede que le resulte útil como referencia.

import cookielib
import logging
import sys
import urllib
import urllib2

cookies = cookielib.LWPCookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies))
urllib2.install_opener(opener)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-GB; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12',
    'Accept': 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
    'Accept-Language': 'en-gb,en;q=0.5',
    'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
}

# Fetch the login page to set initial cookies
urllib2.urlopen(urllib2.Request('http://www.rllmukforum.com/index.php?act=Login&CODE=00', None, headers))

# Login so we can access the Off Topic forum
login_headers = headers.copy()
login_headers.update({
    'Referer': 'http://www.rllmukforum.com/index.php?act=Login&CODE=00',
    'Content-Type': 'application/x-www-form-urlencoded',
})
html = urllib2.urlopen(urllib2.Request('http://www.rllmukforum.com/index.php?act=Login&CODE=01',
                                       urllib.urlencode({
                                           'referer': 'http://www.rllmukforum.com/index.php?',
                                           'UserName': RLLMUK_USERNAME,
                                           'PassWord': RLLMUK_PASSWORD,
                                       }),
                                       login_headers)).read()
if 'The following errors were found' in html:
    logging.error('RLLMUK login failed')
    logging.info(html)
    sys.exit(1)

Otros consejos

Recomiendo echar un vistazo a mecanizar biblioteca;está diseñado precisamente para este tipo de tarea.También es mucho más fácil que hacerlo a mano.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top