def send_request()

in aliyun-python-sdk-dybaseapi/aliyunsdkdybaseapi/mns/mns_http.py [0:0]


    def send_request(self, req_inter):
        try:
            if self.logger:
                self.logger.debug("SendRequest %s" % req_inter)

            proxy = self.get_env_proxy()
            if proxy:
                url = urlparse(proxy)
                self.conn.close()
                if url.username:
                    req_inter.header['Proxy-Authorization'] = _basic_auth_str(unquote(url.username),
                                                             unquote(url.password))
                if self.is_https:
                    self.conn = MNSHTTPSConnection(url.hostname, url.port)
                else:
                    self.conn = MNSHTTPConnection(url.hostname, url.port, connection_timeout=self.connection_timeout)
                self.conn.set_tunnel(self.host, headers=req_inter.header)
            else:
                if self.conn.host != self.host:
                    self.conn.close()
                    self.conn = self._new_conn()

            self.conn.request(req_inter.method, 'http://%s%s' % (self.host, req_inter.uri), req_inter.data,
                              req_inter.header)
            self.conn.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
            try:
                http_resp = self.conn.getresponse()
            except BadStatusLine:
                #open another connection when keep-alive timeout
                #httplib will not handle keep-alive timeout, so we must handle it ourself
                self.conn.close()
                self.conn.request(req_inter.method, req_inter.uri, req_inter.data, req_inter.header)
                self.conn.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
                http_resp = self.conn.getresponse()
            headers = dict(http_resp.getheaders())
            resp_inter = ResponseInternal(status=http_resp.status, header=headers, data=http_resp.read())
            self.request_size = self.conn.request_length
            self.response_size = len(resp_inter.data)
            if not self.is_keep_alive():
                self.conn.close()
            if self.logger:
                self.logger.debug("GetResponse %s" % resp_inter)
            return resp_inter
        except Exception as e:
            self.conn.close()
            raise MNSClientNetworkException("NetWorkException", str(e), req_inter.get_req_id()) #raise netException