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 :

Utilisé un proxy HTTP et activer les cookies avec python


Sujet :

Réseau/Web Python

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Utilisé un proxy HTTP et activer les cookies avec python
    Bonsoir chère communauté!
    Tout d'abord, je me présente, parce que je suis nouveau parmis vous

    Je suis Sekler et je code en python depuis peu (1mois), j'ai l'ambition de faire un robot web qui irai chercher des informations sur le web.
    Pour le moment, je me débrouille par trop mal, et google m'a bien aidé.

    Mais là, je bloque .

    Voici mon problème:

    Pour mon crawler, je souhaite utiliser un proxy, ici, pas de problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    proxy_info = { 'host' : '203.162.163.78', 'port' : 80}
    # On créé un handler pour le proxy:
    proxy_support = urllib2.ProxyHandler({"http" : "http://%(host)s:%(port)d" % proxy_info})
    # On créé un opener utilisant ce handler:
    opener = urllib2.build_opener(proxy_support)
    # Puis on installe cet opener comme opener par défaut du module urllib2.
    urllib2.install_opener(opener)
    J'ai trouvé ceci sur le net.

    Aussi, le site où j'essaye de me connecter requiert les cookies.

    Je faisais donc ceci (avant de prendre un proxy):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    # On active le support des cookies pour urllib2
    cookiejar = cookielib.CookieJar()
    urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
    Ensuite, pour ouvrir mes pages web, je faisais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    request = urllib2.Request("http://www.lesiteenquestion.net")
    url = urlOpener.open(request)
    Mais le problème est que je ne sais pas comment faire pour utiliser les cookies ET le proxy.

    J'ai essayé des tonnes de truc mais rien à faire

    Donc voilà, si vous avez de quoi m'aider, ça serait vraiment sympa. Merci beaucoup.

  2. #2
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Tu dois chaîner tes 2 handlers lors de l'appel à build_opener.

  3. #3
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Tu écris un robot dans quel but ?

  4. #4
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par mchk0123 Voir le message
    Tu dois chaîner tes 2 handlers lors de l'appel à build_opener.

    Excuse moi, je ne vois pas ce que vous voulez dire par là, pouvez-vous me copier/coller un code d'exemple svp?

    J'écris ce bot dans le but de fournir des statistiques un site.
    Il ira se connecter sur le site et stockera des informations comme:

    Nombre de membres a chaque heure.
    Evolution des statistiques, etc.

    Mais à la base, c'est surtout pour "m'entrainer" à la création de bot, voir le fonctionnement, etc.

  5. #5
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Documentation Python :

    build_opener( [handler, ...])

    Return an OpenerDirector instance, which chains the handlers in the order given.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    build_opener(proxy_support, cookie_processor)

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 893
    Points : 7 249
    Points
    7 249

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre aide.

    J'ai une dernière question, y a-t-il un historique sous python?

    Je m'explique:

    Imaginons que je fasse:

    urlOpener.open('http://www.site1.com/page1.php')
    urlOpener.open('http://www.site1.com/page2.php')

    Est-ce que quand j'arriverai sur http://www.site1.com/page2.php, l'historique de ma page précédente sera: http://www.site1.com/page1.php ?

    Par exemple, pour un history.back en javascript.

    Merci.

  8. #8
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    A ma connaissance non, mais tu peut facilement en implémenter un dans une classe "Crawler" qui encapsulerait les appels à "urlOpener.open()" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Crawler:
        def __init__(self):
            self.hist = []
        def open(self, url):
            self.hist.append(url)
            urlOpener.open(url)
            ...
        def back(self):
            url = self.hist[-2]
            del self.hist[-2] ; del self.hist[-1]
            self.open(url)

  9. #9
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci pour ton code mchk0123, mais avec ce code, est-ce que page2.php

    Saura que ma page d'avant était page1.php ?

  10. #10
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Si j'ai bien compris tu veux que les scripts côté client (JavaScript ou autre) puissent s'exécuter comme dans un navigateur ?

    Python n'a pas d'interpreteur JavaScript dans ses librairies par défaut, mais rien ne t'empêches d'en chercher une (en Py ou C/C++), de parser la page récupérée + liens externes, et d'assurer la liaison entre ton Crawler et l'interpreteur.

    Ce n'est pas une solution facile ni rapide.

    Bon courage.

  11. #11
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Non, ce n'est pas ceci. Je vais mieux m'expliquer:



    Je souhaite ouvrir une page qui est:

    http://www.site.com/attaque.php?id=123

    Seulement, cette page vérifie d'ou l'on vient avec un:

    $_SERVER["HTTP_REFERER"]

    Si je ne viens pas de la page:

    http://www.site.com/joueur.php?id=123

    Alors l'attaque sera annulée et je serai redirigé vers:

    http://www.site.com/joueur.php?id=123

    Je souhaite donc ouvrir:


    http://www.site.com/joueur.php?id=123

    puis:

    http://www.site.com/attaque.php?id=123

    Mais le HTTP_REFERER ne semble pas voir de quelle page je provient.

    J'espère avoir bien expliqué :s

    merci

  12. #12
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Ah ! Tu veux jouer avec le referer ? Il fallait le dire plus tôt.

    Après l'installation des handlers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    req = urllib2.Request(url)
    req.add_header('Referer', url_referer)
    f = urllib2.urlopen(req)

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 62
    Points : 38
    Points
    38
    Par défaut
    Tu peux utiliser mechanize qui fait plus navigateur web

  14. #14
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour votre aide. C'est tres sympa!

    MERCI

Discussions similaires

  1. fopen() mais il me demande d'activer les cookies
    Par Khleo dans le forum Langage
    Réponses: 4
    Dernier message: 07/04/2011, 15h53
  2. Réponses: 0
    Dernier message: 18/11/2008, 19h06
  3. comment utiliser les cookies avec struts
    Par mima_mine dans le forum Struts 1
    Réponses: 3
    Dernier message: 04/09/2008, 07h44
  4. les cookies avec IE
    Par monforte dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/12/2007, 17h05
  5. Réponses: 9
    Dernier message: 18/05/2006, 14h37

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