IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

utilisation urllib2 login pass


Sujet :

Réseau/Web Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    378
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 378
    Points : 94
    Points
    94
    Par défaut utilisation urllib2 login pass
    bonjour je cherche à utiliser urlib2 pour utiliser un formulaire.
    Par contre, la page n'est pas accessible de suite, il y a des redirection et session.

    url de pointage : http://smsmms1.orange.fr/C/Sms/sms_write.php
    ensuite on est redirigé vers une autre page où on doit saisir un login et password puis valider, si ok on est redirigé vers la page
    http://smsmms1.orange.fr/C/Sms/sms_write.php?dub=2&

    où il faut renseigner des champs.

    voici le code actuel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    import cookielib, urllib, urllib2
    import os.path
    import sys
     
    COOKIEFILE = 'cookies.lwp' #### le chemin et fichier pour sauvegarder vos cookies
    cj = None
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    import cookielib, urllib, urllib2
    import os.path
    import sys
     
    COOKIEFILE = 'cookies.lwp' 
    cj = None
    user_credential = 'XXXXXX'
     
     
    urlopen = urllib2.urlopen
    Request = urllib2.Request
    cj = cookielib.LWPCookieJar() 
     
    if os.path.isfile(COOKIEFILE):
    	cj.load(COOKIEFILE)
     
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    urllib2.install_opener(opener)
     
    mon_url = 'http://smsmms1.orange.fr/C/Sms/sms_write.php'
    values = {'user_credential':user_credential}
    txdata = urllib.urlencode(values)
     
    txheaders =  {'User-agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}	
     
    try:
    	req = Request(mon_url, txdata, txheaders) 
    	handle = urlopen(req) 
    	# Ecriture :
    	f = open("orange.html", "w")
    	f.write(handle.read())
    	f.close()
    	# Lecture :
    	f = open("orange.html", "r")
    	var="Non la bonne page n'a pas été trouvée!"
    	for ligne in f:
    		mot_recherche=user_credential
    		if mot_recherche in ligne:
    			var="--- Oui la bonne page est affichée."
    	print var
    	print
    	f.close()
     
    except IOError, e:
        print '--- ERREUR'
        sys.exit()
    else:
        print handle.headers
     
     
    print '--- Voici les cookies:'
    for index, cookie in enumerate(cj):
        print index, '  :  ', cookie
    cj.save(COOKIEFILE)
    il faut encore ajouter la partie password

    merci de votre aide

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Tu as pensé à l'utilisation de mechanize ? Tu as dedans un navigateur qui gère les cookies et récupère les formulaires.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    378
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 378
    Points : 94
    Points
    94
    Par défaut
    je n'ai pas encore regardé mechanize.

    le problème je pense vient du fait qu'il y ait une redirection sur une autre page pour s'authentifier.
    car en lançant le script, il sauvegarde le retour et là j'obtiens la page d'authentification.

    Ensuite un autre problème est que la zone que je recherche input n'a pas de name="..." mais des id="..."
    je ne sais pas si cela fonctionne avec urllib2

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    378
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 378
    Points : 94
    Points
    94
    Par défaut
    j'ai modifié le code mais je n'arrive toujours à m'authentifier la page retournée dans orange.html est la page d'identification

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    import cookielib, urllib, urllib2
    import os.path
    import sys
     
    COOKIEFILE = 'cookies.lwp' 
    cj = None
    user = '06XXXXXXXX'
    passw = 'mon_pass'
     
     
    urlopen = urllib2.urlopen
    Request = urllib2.Request
    cj = cookielib.LWPCookieJar() 
     
    if os.path.isfile(COOKIEFILE):
    	cj.load(COOKIEFILE)
     
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    urllib2.install_opener(opener)
     
    mon_url = 'http://smsmms1.orange.fr/C/Sms/sms_write.php'
    values = {"credential" : str(user),
                         "pwd" : str(passw),
                         "save_user": "false",
                         "save_pwd" : "false",
                         "save_TC"  : "true",
                         "action"   : "valider",
                         "usertype" : "",
                         "service"  : "",
                         "url"      : "http://www.orange.fr",
                         "case"     : "",
                         "origin"   : "",    }
     
    txdata = urllib.urlencode(values)
     
    #txheaders =  {'User-agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}	
    txheaders = { 'Referer' : 'http://id.orange.fr/auth_user/template/auth0user/htm/vide.html','Content-Type':'application/x-www-form-urlencoded'}
    try:
    	req = Request(mon_url, txdata, txheaders) 
    	handle = urlopen(req) 
    	# Ecriture :
    	f = open("orange.html", "w")
    	f.write(handle.read())
    	f.close()
    	# Lecture :
    	f = open("orange.html", "r")
    	var="Non la bonne page n'a pas été trouvée!"
    	for ligne in f:
    		mot_recherche="credential"
    		if mot_recherche in ligne:
    			var="--- Oui la bonne page est affichée."
    	print var
    	print
    	f.close()
     
    except IOError, e:
        print '--- ERREUR'
        sys.exit()
    else:
        print handle.headers
     
     
    print '--- Voici les cookies:'
    for index, cookie in enumerate(cj):
        print index, '  :  ', cookie
    cj.save(COOKIEFILE)
    il doit manquer une chose mais je ne vois pas

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    378
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 378
    Points : 94
    Points
    94
    Par défaut
    J'ai avancé dans mon problème mais je n'ai toujours pas la solution.

    En fait je constate que j'essaye de passer les variables à la page où normalement on doit le saisir plutôt que de passer les variables à la page cible qui se trouve dans action.

    Le problème est que je ne peux pas saisir directement cette page, car il me faut obtenir des variables de session qui se trouvent dans la première page.
    et là je ne sais comment faire pour charger cette page et ainsi obtenir les variables pour ensuite alimenter l'autre page

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    378
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 378
    Points : 94
    Points
    94
    Par défaut Toujours le problème final - mais plus clair
    J'ai revu l'ensemble du code
    pour tester il faut un compte orange.fr et remplacer mettre son num de tel et pass web
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    import mechanize
    import cookielib
     
    # Browser
    br = mechanize.Browser()
     
    # Cookie Jar
    cj = cookielib.LWPCookieJar()
    br.set_cookiejar(cj)
     
    # Browser options
    br.set_handle_equiv(True)
    br.set_handle_gzip(True)
    br.set_handle_redirect(True)
    br.set_handle_referer(True)
    br.set_handle_robots(False)
     
    # Follows refresh 0 but not hangs on refresh > 0
    br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
     
     
    # User-Agent (this is cheating, ok?)
    br.addheaders = [('Referer', 'http://id.orange.fr/auth_user/template/auth0user/htm/vide.html'),
                                  ("Content-Type" , 'application/x-www-form-urlencoded') ]
     
    br.open('http://id.orange.fr/auth_user/bin/auth_user.cgi?url=http://www.orange.fr')
     
    #sauvegarde de la page cible
    f = open("sms-1-form.html", "w")
    f.write(br.response().read())
    f.close()
     
    # Show the response headers
    print br.response().info()
     
    # Show the available forms
    for f in br.forms():
        print f
     
     
    # select the first (index zero) form
    br.select_form(nr=0)
    br.form.set_value('0600000000', name='credential')
    br.form.set_value('votre_pass_ici', name='pwd')
    br.form.set_value(0, name='save_pwd')
    br.submit()
     
    #passage à la page cible
    #où il y a le formulaire qui sera saisi par la suite
    br.follow_link(url_regex=r'smsmms')
     
    #sauvegarde de la page cible
    f = open("sms-2-cible.html", "w")
    f.write(br.response().read())
    f.close()
     
    #affichage des formulaires de la page cible
    for f in br.forms():
        print f
    le programme se connecte et enregistre dans sms-1-form.html la page d'identification puis suis le lien pour sauvegarder dans sms-2-cible.html

    mais la dernière boucle for génère l'erreur suivante alors que dans la première il n'y a pas de pb.
    Dans le source du résultat on trouve bien un form name='formulaire' donc je ne comprends pas

    voici l'erreur générée (le premier form correspond à celui de la première page et on devrait obtenir un truc similaire pour la seconde mais je ne vois pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <form1 POST http://id.orange.fr/auth_user/bin/authNuser.cgi?action=valider&date=1310559848&skey=9eccdabe56722e0db37efa5c981526e3&url=http://www.orange.fr application/x-www-form-urlencoded
      <SubmitControl(valider=) (readonly)>
      <TextControl(credential=)>
      <HiddenControl(user_enroll_new=) (readonly)>
      <PasswordControl(pwd=)>
      <ImageControl(valider=)>
      <CheckboxControl(save_pwd=[1])>>
    Traceback (most recent call last):
      File "./sms-orange.py", line 61, in <module>
        for f in br.forms():
      File "/usr/lib/python2.6/dist-packages/mechanize/_mechanize.py", line 426, in forms
        return self._factory.forms()
      File "/usr/lib/python2.6/dist-packages/mechanize/_html.py", line 559, in forms
        self._forms_factory.forms())
      File "/usr/lib/python2.6/dist-packages/mechanize/_html.py", line 228, in forms
        raise ParseError(exc)
    mechanize._html.ParseError
    au besoin je peux transmettre les deux fichiers générés

Discussions similaires

  1. [urllib] Connexion login pass
    Par ark42 dans le forum Réseau/Web
    Réponses: 9
    Dernier message: 04/08/2006, 19h51
  2. Réponses: 3
    Dernier message: 08/06/2006, 17h38
  3. Connexion automatique sur base SQL (Login/pass mémorisé)
    Par Fredo67 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/10/2005, 16h24
  4. [IDHTTP] Problème avec la methode post (login:pass@ww.url)
    Par Rayek dans le forum Web & réseau
    Réponses: 5
    Dernier message: 11/07/2005, 10h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo