Comment se connecter à un forum phpBB3 via un script Python utilisant urllib, urllib2 et ClientCookie?

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

  •  02-07-2019
  •  | 
  •  

Question

(ClientCookie est un module de traitement (automatique) des 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()

Le script ne se connecte pas, mais semble plutôt être redirigé vers la même page de connexion lui demandant un nom d'utilisateur et un mot de passe. Qu'est-ce que je fais mal?

Toute aide serait grandement appréciée! Merci!

Était-ce utile?

La solution

Avez-vous déjà essayé de récupérer la page de connexion?

Je suggérerais d'utiliser les données de sabotage pour avoir un aperçu de exactement ce qui est envoyé lorsque vous demandez la page de connexion, puis que vous vous connectez normalement à l'aide d'un navigateur Web depuis un nouveau départ, sans aucun cookie initial en place, afin que votre script puisse le répliquer exactement.

C’est l’approche que j’ai utilisée lors de la rédaction de ce qui suit, extraite d’un script qui doit se connecter à un forum Invision Power Board, à l’aide de cookielib et urllib2 - vous pouvez la trouver utile en tant que référence.

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)

Autres conseils

Je vous conseillerais de consulter la bibliothèque mechanize ; il est conçu précisément pour ce type de tâche. C'est aussi beaucoup plus facile que de le faire à la main.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top