2012-04-16 3 views
1

J'ai besoin d'explorer quelques sites Web pour un projet universitaire et j'ai atteint une impasse pour un site qui nécessite une connexion. J'utilise les modules urllib, urllib2, cookielib en Python pour me connecter. Cela ne fonctionne pas pour http://www.cafemom.com. La réponse http que je reçois est enregistrée dans un fichier .txt et correspond à la page "Connexion infructueuse".Besoin d'aide pour se connecter à un site Web utilisant python

J'ai également essayé d'utiliser le paquet "twill" à cet effet, ce qui n'a pas fonctionné pour moi non plus. Quelqu'un peut-il suggérer ce que je devrais faire? Ci-dessous la méthode principale login() que j'ai utilisée à cette fin.

def urlopen(req): 
    try: 
      r = urllib2.urlopen(req) 
    except IOError, e: 
      if hasattr(e, 'code'): 
        print 'The server couldn\'t fulfill the request.' 
        print 'Error code: ', e.code 
      elif hasattr(e, 'reason'): 
        print 'We failed to reach a server.' 
        print 'Reason: ', e.reason 
      raise 

    return r 

class Cafemom: 
    """Communication with Cafemom""" 

    def __init__(self, cookieFile = 'cookie.jar', debug = 0): 
      self.cookieFile = cookieFile 
      self.debug = debug 
      self.loggedIn = 0 
      self.uid = '' 
      self.email = '' 
      self.passwd = '' 
      self.cj = cookielib.LWPCookieJar() 

      if os.path.isfile(cookieFile): 
        self.cj.load(cookieFile) 

      opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cj)) 
      urllib2.install_opener(opener) 

    def __del__(self): 
      self.cj.save(self.cookieFile) 

    def login(self, email, password): 
      """Logging in Cafemom""" 

      self.email = email 
      self.passwd = password 
      url='http://www.cafemom.com/lohin.php?' 
      cnt='http://www.cafemom.com' 
      headers = {'Content-Type': 'application/x-www-form-urlencoded'} 
      body = {'identifier': email, 'password': password } 
      if self.debug == 1: 
        print "Logging in..." 

      req = urllib2.Request(url, urllib.urlencode(body), headers) 
      print urllib.urlencode(body) 
      #print req.group() 
      handle = urlopen(req) 

      h = handle.read() 
      f = open("responseCafemom.txt","w") 
      f.write(f) 
      f.close() 

J'ai aussi essayé d'utiliser ce code et a été débouté

import urllib, urllib2, cookielib 

username = myusername 
password = mypassword 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
login_data = urllib.urlencode({'identifier' : username, 'password' : password}) 
opener.open('http://www.cafemom.com/login.php', login_data) 
resp = opener.open('http://www.cafemom.com') 
print resp.read() 
+0

Vous avez « login.php » Spel conduit mal - "lohin.php". En outre, consultez http://cl.ly/272Q2o2q3P2p1g1B1K44 - notez qu'il y a plus de champs que 'identifiant' et 'mot de passe'. –

Répondre

1

Je ne sais pas si c'est exactement ce dont vous avez besoin, mais il vaut la peine d'try.The un excellent module de requests pour python prend en charge les cookies, et authentification de base HTTP.

Ces exemples proviennent directement de sa documentation.

Voici l'exemple auth de base

payload = {'identifer': email, 'password': password} 
r = requests.post("http://www.cafemom.com/login.php?", data=payload) 

Voici comment passer les cookies précédemment enregistrés (que vous pouvez accéder à une demande précédente avec « r.cookies » magasins .Cookie ne sont que des dictionnaires.

r = requests.get(url, cookies=cookies) 

Voici comment lire la réponse de votre demande

f = open("responseCafemom.txt","w") 
f.write(r.text) 
+0

Merci pour votre aide – user1246197

Questions connexes