diff options
author | Guido van Rossum <guido@python.org> | 1998-08-06 13:39:09 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1998-08-06 13:39:09 (GMT) |
commit | 4163e708edbe17c813c25358a34bbfa6372cf050 (patch) | |
tree | 70a6e032d5f7ba1f02ab5712d2813d118b46791d | |
parent | 4ff6d27319bf07a43ba41905658241e73457c291 (diff) | |
download | cpython-4163e708edbe17c813c25358a34bbfa6372cf050.zip cpython-4163e708edbe17c813c25358a34bbfa6372cf050.tar.gz cpython-4163e708edbe17c813c25358a34bbfa6372cf050.tar.bz2 |
On the Mac, use Internet Config to find the proxies (Jack Jansen).
Also added two XXX comments about lingering thread unsafeness.
-rw-r--r-- | Lib/urllib.py | 64 |
1 files changed, 49 insertions, 15 deletions
diff --git a/Lib/urllib.py b/Lib/urllib.py index 2cb4deb..2a9087a 100644 --- a/Lib/urllib.py +++ b/Lib/urllib.py @@ -104,6 +104,7 @@ class URLopener: # Undocumented feature: you can use a different # ftp cache by assigning to the .ftpcache member; # in case you want logically independent URL openers + # XXX This is not threadsafe. Bah. def __del__(self): self.close() @@ -345,6 +346,7 @@ class URLopener: dirs, file = dirs[:-1], dirs[-1] if dirs and not dirs[0]: dirs = dirs[1:] key = (user, host, port, string.joinfields(dirs, '/')) + # XXX thread unsafe! if len(self.ftpcache) > MAXFTPCACHE: # Prune the cache, rather arbitrarily for k in self.ftpcache.keys(): @@ -908,21 +910,53 @@ def urlencode(dict): # Proxy handling -def getproxies(): - """Return a dictionary of protocol scheme -> proxy server URL mappings. - - Scan the environment for variables named <scheme>_proxy; - this seems to be the standard convention. If you need a - different way, you can pass a proxies dictionary to the - [Fancy]URLopener constructor. - - """ - proxies = {} - for name, value in os.environ.items(): - name = string.lower(name) - if value and name[-6:] == '_proxy': - proxies[name[:-6]] = value - return proxies +if os.name == 'mac': + def getproxies(): + """Return a dictionary of scheme -> proxy server URL mappings. + + By convention the mac uses Internet Config to store + proxies. An HTTP proxy, for instance, is stored under + the HttpProxy key. + + """ + try: + import ic + except ImportError: + return {} + + try: + config = ic.IC() + except ic.error: + return {} + proxies = {} + # HTTP: + if config.has_key('UseHTTPProxy') and config['UseHTTPProxy']: + try: + value = config['HTTPProxyHost'] + except ic.error: + pass + else: + proxies['http'] = 'http://%s' % value + # FTP: XXXX To be done. + # Gopher: XXXX To be done. + return proxies + +else: + def getproxies(): + """Return a dictionary of scheme -> proxy server URL mappings. + + Scan the environment for variables named <scheme>_proxy; + this seems to be the standard convention. If you need a + different way, you can pass a proxies dictionary to the + [Fancy]URLopener constructor. + + """ + proxies = {} + for name, value in os.environ.items(): + name = string.lower(name) + if value and name[-6:] == '_proxy': + proxies[name[:-6]] = value + return proxies # Test and time quote() and unquote() |