summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1998-08-06 13:39:09 (GMT)
committerGuido van Rossum <guido@python.org>1998-08-06 13:39:09 (GMT)
commit4163e708edbe17c813c25358a34bbfa6372cf050 (patch)
tree70a6e032d5f7ba1f02ab5712d2813d118b46791d
parent4ff6d27319bf07a43ba41905658241e73457c291 (diff)
downloadcpython-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.py64
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()