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 !!