def make_connection(self):
     """ initate a connection if needed or reuse a socket"""
     
     # apply on connect filters
     self.filters.apply("on_connect", self)
     if self._sock is not None:
         return self._sock
     
     addr = (self.host, self.port)
     s = None
     # if we defined a pool use it
     if self.pool is not None:
         s = self.pool.get(addr)
         
     if not s:
         # pool is empty or we don't use a pool
         if self.uri.scheme == "https":
             s = sock.connect(addr, True, self.timeout, **self.ssl_args)
         else:
             s = sock.connect(addr, False, self.timeout)
     return s
    def on_connect(self, req):
        proxy_auth = _get_proxy_auth()
        if req.uri.scheme == "https":
            proxy = os.environ.get("https_proxy")
            if proxy:
                if proxy_auth:
                    proxy_auth = "Proxy-authorization: %s" % proxy_auth
                proxy_connect = "CONNECT %s HTTP/1.0\r\n" % (req.uri.netloc)
                user_agent = "User-Agent: restkit/%s\r\n" % __version__
                proxy_pieces = "%s%s%s\r\n" % (proxy_connect, proxy_auth, user_agent)
                proxy_uri = urlparse.urlparse(proxy)
                proxy_host, proxy_port = util.parse_netloc(proxy_uri)

                if req.pool is not None:
                    s = req.pool.get((proxy_host, proxy_port))
                    if s:
                        self._sock = s
                        req.host = proxy_host
                        req.port = proxy_port
                        return

                # Connect to the proxy server,
                # very simple recv and error checking

                p_sock = sock.connect((proxy_host, int(proxy_port)))
                sock.send(p_sock, proxy_pieces)

                # wait header
                parser = http.ResponseParser(p_sock)
                resp = parser.next()

                if resp.status_int != 200:
                    raise ProxyError("Error status=%s" % resp.status)

                sock._ssl_wrap_socket(p_sock, None, None)

                # update socket
                req._sock = p_sock
                req.host = proxy_host
                req.port = proxy_port
        else:
            proxy = os.environ.get("http_proxy")
            if proxy:
                proxy_uri = urlparse.urlparse(proxy)
                proxy_host, proxy_port = self._host_port(proxy_uri)
                if proxy_auth:
                    req.headers.append(("Proxy-Authorization", proxy_auth.strip()))

                req.host = proxy_host
                req.port = proxy_port
    def connect(self):
        self.filters.apply("on_connect", self)

        self.sock = sock.connect(self.addr, self.is_ssl, 
                self.timeout, **self.ssl_args)
示例#4
0
    def connect(self):
        self.filters.apply("on_connect", self)

        self.sock = sock.connect(self.addr, self.is_ssl, self.timeout,
                                 **self.ssl_args)