95 votes

Comment puis-je me connecter à un site Web avec Python?

Comment puis-je le faire? J'essayais d'entrer un lien spécifié (avec urllib), mais pour ce faire, je dois me connecter.

J'ai cette source sur le site:

 <form id="login-form" action="auth/login" method="post">
    <div>
    <!--label for="rememberme">Remember me</label><input type="checkbox" class="remember" checked="checked" name="remember me" /-->
    <label for="email" id="email-label" class="no-js">Email</label>
    <input id="email-email" type="text" name="handle" value="" autocomplete="off" />
    <label for="combination" id="combo-label" class="no-js">Combination</label>
    <input id="password-clear" type="text" value="Combination" autocomplete="off" />
    <input id="password-password" type="password" name="password" value="" autocomplete="off" />
    <input id="sumbitLogin" class="signin" type="submit" value="Sign In" />
 

Est-ce possible?

74voto

sloth Points 40517

Vous voulez peut-être utiliser du sergé (il est basé sur la mécanisation ). Il est assez facile à utiliser et devrait pouvoir faire ce que vous voulez.

Il ressemblera à ceci:

 from twill.commands import *
go('http://mysite.org')

fv("1", "email-email", "blabla.com")
fv("1", "password-clear", "testpass")

submit('0')
 

Vous pouvez utiliser showforms() pour répertorier tous les formulaires une fois que vous avez utilisé go(...) pour accéder au site auquel vous souhaitez vous connecter. Essayez-le simplement depuis l'interpréteur python.

29voto

Anthony Briggs Points 1066

En général, vous aurez besoin de cookies pour vous connecter à un site, ce qui signifie cookielib, urllib et urllib2. Voici une classe qui j'ai écrit à l'époque où je jouais Facebook jeux sur le web:

import cookielib
import urllib
import urllib2

# set these to whatever your fb account is
fb_username = "your@facebook.login"
fb_password = "secretpassword"

class WebGamePlayer(object):

    def __init__(self, login, password):
        """ Start up... """
        self.login = login
        self.password = password

        self.cj = cookielib.CookieJar()
        self.opener = urllib2.build_opener(
            urllib2.HTTPRedirectHandler(),
            urllib2.HTTPHandler(debuglevel=0),
            urllib2.HTTPSHandler(debuglevel=0),
            urllib2.HTTPCookieProcessor(self.cj)
        )
        self.opener.addheaders = [
            ('User-agent', ('Mozilla/4.0 (compatible; MSIE 6.0; '
                           'Windows NT 5.2; .NET CLR 1.1.4322)'))
        ]

        # need this twice - once to set cookies, once to log in...
        self.loginToFacebook()
        self.loginToFacebook()

    def loginToFacebook(self):
        """
        Handle login. This should populate our cookie jar.
        """
        login_data = urllib.urlencode({
            'email' : self.login,
            'pass' : self.password,
        })
        response = self.opener.open("https://login.facebook.com/login.php", login_data)
        return ''.join(response.readlines())

Vous n'aurez pas nécessairement besoin de l'HTTPS, ou de Rediriger les gestionnaires, mais ils ne le font pas de mal, et c'est l'ouvreur de beaucoup plus robuste. Vous pourriez aussi ne pas besoin d'accepter les cookies, mais il est difficile de dire à partir de la forme que vous avez posté. Je soupçonne que vous pourriez, uniquement à partir de l' "se Souvenir de moi' entrée qui a été commenté.

19voto

blokeley Points 1543
 import cookielib
import urllib
import urllib2

url = 'http://www.someserver.com/auth/login'
values = {'email-email' : 'john@example.com',
          'password-clear' : 'Combination',
          'password-password' : 'mypassword' }

data = urllib.urlencode(values)
cookies = cookielib.CookieJar()

opener = urllib2.build_opener(
    urllib2.HTTPRedirectHandler(),
    urllib2.HTTPHandler(debuglevel=0),
    urllib2.HTTPSHandler(debuglevel=0),
    urllib2.HTTPCookieProcessor(cookies))

response = opener.open(url, data)
the_page = response.read()
http_headers = response.info()
# The login cookies should be contained in the cookies variable
 

Voir http://docs.python.org/library/urllib2.html pour plus d'informations.

7voto

Alex Martelli Points 330805

Sites internet en général peut vérifier les autorisations de nombreuses façons différentes, mais celui que vous ciblez semble raisonnablement facile pour vous.

Tous vous avez besoin est de POST de la auth/login d'URL dans un formulaire codé blob avec les différents champs que vous voyez là (oubliez les étiquettes for, ils sont des éléments de décoration pour les visiteurs de l'homme). handle=whatever&password-clear=pwd et ainsi de suite, aussi longtemps que vous savez que les valeurs de la poignée (AKA e-mail) et un mot de passe vous devriez être bien.

Sans doute que le POST va vous rediriger vers des "vous avez réussi à vous connecter à la page" avec un Set-Cookie - tête de la validation de votre session (assurez-vous d'enregistrer le cookie et l'envoyer de nouveau sur la poursuite de l'interaction le long de la séance!).

4voto

Andrew_1510 Points 2028

Pour les choses HTTP, le choix actuel devrait être: Demandes - HTTP pour les humains

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X