1
2
3
4
5
6 """
7 filters - Simple proxy
8
9 """
10
11 import base64
12 import os
13 import urlparse
14 import socket
15
16 from restkit import util
17
18 from restkit import __version__
19
22
24 """ Simple proxy filter.
25 This filter find proxy from environment and if it exists it
26 connect to the proxy and modify connection headers.
27 """
28
30 proxy_auth = _get_proxy_auth()
31 if conn.uri.is_ssl == "https":
32 proxy = os.environ.get('https_proxy')
33 if proxy:
34 if proxy_auth:
35 proxy_auth = 'Proxy-authorization: %s' % proxy_auth
36 proxy_connect = 'CONNECT %s:%s HTTP/1.0\r\n' % conn.addr
37 user_agent = "User-Agent: restkit/%s\r\n" % __version__
38 proxy_pieces = '%s%s%s\r\n' % (proxy_connect, proxy_auth,
39 user_agent)
40 proxy_uri = urlparse.urlparse(proxy)
41 proxy_host, proxy_port = util.parse_netloc(proxy_uri)
42
43 route = ((proxy_host, proxy_port), True, None, {})
44 pool = conn.get_pool(route)
45
46 try:
47 p_sock = pool.request()
48 except socket.error, e:
49 raise ProxyError(str(e))
50
51 conn.sock = p_sock
52 conn.addr = (proxy_host, proxy_port)
53 conn.is_ssl = True
54
55 else:
56 proxy = os.environ.get('http_proxy')
57 if proxy:
58 proxy_uri = urlparse.urlparse(proxy)
59 proxy_host, proxy_port = self._host_port(proxy_uri)
60 if proxy_auth:
61 proxy.headers.append(('Proxy-Authorization',
62 proxy_auth.strip()))
63 proxy.addr = (proxy_host, proxy_port)
64
65
67 proxy_username = os.environ.get('proxy-username')
68 if not proxy_username:
69 proxy_username = os.environ.get('proxy_username')
70 proxy_password = os.environ.get('proxy-password')
71 if not proxy_password:
72 proxy_password = os.environ.get('proxy_password')
73 if proxy_username:
74 user_auth = base64.encodestring('%s:%s' % (proxy_username,
75 proxy_password))
76 return 'Basic %s\r\n' % (user_auth.strip())
77 else:
78 return ''
79