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 d'un proxy avec urllib2


Sujet :

Réseau/Web Python

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Points : 6
    Points
    6
    Par défaut Utilisation d'un proxy avec urllib2
    Bonjour à tous,

    Je débute en python et je rencontre déjà mon premier problème...
    J'utilise la librairie javascript openlayers et pour certains protocoles (WFS) je doit utiliser un proxy "local".

    J'ai donc mis en place proxy.cgi avec le code suivant :
    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
    71
    72
    73
    74
    75
    76
    77
    78
    #!c:\python26\python.exe
     
    """This is a blind proxy that we use to get around browser
    restrictions that prevent the Javascript from loading pages not on the
    same server as the Javascript.  This has several problems: it's less
    efficient, it might break some sites, and it's a security risk because
    people can use this proxy to browse the web and possibly do bad stuff
    with it.  It only loads pages via http and https, but it can load any
    content type. It supports GET and POST requests."""
     
    import urllib2
    import cgi
    import sys, os
     
    # Designed to prevent Open Proxy type stuff.
     
    allowedHosts = ['www.openlayers.org', 'openlayers.org', 
                    'labs.metacarta.com', 'world.freemap.in', 
                    'prototype.openmnnd.org', 'geo.openplans.org',
                    'sigma.openplans.org', 'demo.opengeo.org',
                    '192.168.3.85', '192.168.3.85:8080', 'localhost:8080', 'localhost',
                    'www.openstreetmap.org', 'sample.avencia.com', 'wxs.ign.fr']
     
    method = os.environ["REQUEST_METHOD"]
     
    if method == "POST":
        qs = os.environ["QUERY_STRING"]
        d = cgi.parse_qs(qs)
        if d.has_key("url"):
            url = d["url"][0]
        else:
            url = "http://www.openlayers.org"
    else:
        fs = cgi.FieldStorage()
        url = fs.getvalue('url', "http://www.openlayers.org")
     
    try:
        host = url.split("/")[2]
        if allowedHosts and not host in allowedHosts:
            print "Status: 502 Bad Gateway"
            print "Content-Type: text/plain"
            print
            print "This proxy does not allow you to access that location (%s)." % (host,)
            print
            print os.environ
     
        elif url.startswith("http://") or url.startswith("https://"):
     
            if method == "POST":
                length = int(os.environ["CONTENT_LENGTH"])
                headers = {"Content-Type": os.environ["CONTENT_TYPE"]}
                body = sys.stdin.read(length)
                r = urllib2.Request(url, body, headers)
                y = urllib2.urlopen(r)
            else:
                y = urllib2.urlopen(url)
     
            # print content type header
            i = y.info()
            if i.has_key("Content-Type"):
                print "Content-Type: %s" % (i["Content-Type"])
            else:
                print "Content-Type: text/plain"
            print
     
            print y.read()
     
            y.close()
        else:
            print "Content-Type: text/plain"
            print
            print "Illegal request."
     
    except Exception, E:
        print "Status: 500 Unexpected Error"
        print "Content-Type: text/plain"
        print 
        print "Some unexpected error occurred. Error text was:", E
    Cela semble fonctionner j'arrive bien à accéder à mes serveurs locaux via ce proxy... mais pas à des serveurs distants...

    En effet mon serveur web se trouve dans un réseau d'entreprise qui nécessite de passer par un proxy pour accéder à internet...
    Pour faire des requêtes vers internet il faut donc que j'indique à proxy.cgi qu'il doit passer par mon.proxy-d-entreprise.com:80 (pas d'user ni de mot de passe) ...

    J'ai essayé de rajouter les lignes suivantes juste en dessous des imports :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    proxy_url = "http://mon.proxy-d-entreprise.com:80" 
    proxy_support = urllib2.ProxyHandler({'http': proxy_url}) 
    opener = urllib2.build_opener(proxy_support) 
    urllib2.install_opener(opener)
    Mais j'obtiens l'erreur 403
    Some unexpected error occurred. Error text was: HTTP Error 403: Interdit
    D'après ce que j'ai vu il n'y a pas de difficulté particulière pour utiliser "urlopen" via un proxy mais apparemment il me manque quelque chose...

    Merci d'avance à ceux qui pourront m'aider !!

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,
    Je n'ai pas de proxy pour jouer mais, ma lecture de la documentation suggère d'essayer cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    url = ...
    proxy = { 'http' : 'http://mon.proxy-d-entreprise.com:80' }
    handle = urlopen(url, proxies=proxy)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,
    Je n'ai pas de proxy pour jouer mais, ma lecture de la documentation suggère d'essayer cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    url = ...
    proxy = { 'http' : 'http://mon.proxy-d-entreprise.com:80' }
    handle = urlopen(url, proxies=proxy)
    - W
    Merci pour cette réponse !

    Je viens de tester mais j'obtiens un message d'erreur :

    Some unexpected error occurred. Error text was: urlopen() got an unexpected keyword argument 'proxies'
    Je pense que ça viens du fait que j'utilise "urllib2" ca ne doit pas être la même synthaxe non ...?

    le code renvoyant l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    proxy = { 'http' : 'http://mon.proxy-d-entreprise.com:80' }
    ...
    ... = urllib2.urlopen(r, proxies=proxy)

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Effectivement
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    proxy_support = ProxyHandler({"http":"mon.proxy-d-entreprise.com:80"})
    opener = build_opener(proxy_support)
    install_opener(opener)
    Pas de http://

    @+
    Merci d'utiliser le forum pour les questions techniques.

  6. #6
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    proxy_support = ProxyHandler({"http":"mon.proxy-d-entreprise.com:80"})
    opener = build_opener(proxy_support)
    install_opener(opener)
    Pas de http://

    @+
    Merci pour cette réponse; effectivement cela parait logique ^^ mais j'ai toujours une erreur 500 ... :-(

    Comment savoir si c'est mon proxy ou le site distant qui bloque ?

  7. #7
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Citation Envoyé par Wraack Voir le message
    Merci pour cette réponse; effectivement cela parait logique ^^ mais j'ai toujours une erreur 500 ... :-(

    Comment savoir si c'est mon proxy ou le site distant qui bloque ?
    La c'est 500 (Internal server error) et pas 403 (Forbidden), ce n'est plus pareil.

    Commence par tester un site plus général.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    proxy_support = ProxyHandler({"http":"mon.proxy-d-entreprise.com:80"})
    opener = build_opener(proxy_support)
    install_opener(opener)
    page = urlopen("http://www.developpez.net/forums/d853854/autres-langages/python-zope/reseau-web/verification-presence-proxy/")
    print page
    Sinon j'utilise urllib2 pour mettre à jour mes scripts intra/extranet et pour cela je fais la vérification du proxy via un ping. Tu pourrais t'en inspirer pour faire des tests.

    @+
    Merci d'utiliser le forum pour les questions techniques.

Discussions similaires

  1. Utiliser un proxy avec DOMDocument et loadHTMLFile
    Par snorky94 dans le forum Langage
    Réponses: 3
    Dernier message: 27/05/2013, 10h47
  2. Probleme d'utilisation de directX 9 avec visual studio.net
    Par cranedoeuf dans le forum DirectX
    Réponses: 1
    Dernier message: 24/05/2004, 04h33
  3. comment utiliser de l'OpenGL avec du Java ?
    Par DjiZ dans le forum OpenGL
    Réponses: 3
    Dernier message: 14/01/2004, 15h21
  4. Utilisation simple d'@@IDENTITY avec asp
    Par Ajrarn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/10/2003, 10h37
  5. Comment utiliser les styles XP avec Dev-C++?
    Par abraxas dans le forum Dev-C++
    Réponses: 3
    Dernier message: 05/10/2003, 19h47

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