http.py 文件源码

python
阅读 20 收藏 0 点赞 0 评论 0

项目:apm-agent-python 作者: elastic 项目源码 文件源码
def send(self, data, headers, timeout=None):
        response = None

        # ensure headers are byte strings
        headers = {k.encode('ascii') if isinstance(k, compat.text_type) else k:
                   v.encode('ascii') if isinstance(v, compat.text_type) else v
                   for k, v in headers.items()}
        if compat.PY2 and isinstance(self._url, compat.text_type):
            url = self._url.encode('utf-8')
        else:
            url = self._url
        try:
            try:
                response = self.http.urlopen(
                    'POST', url, body=data, headers=headers, timeout=timeout, preload_content=False
                )
                logger.info('Sent request, url=%s size=%.2fkb status=%s', url, len(data) / 1024.0, response.status)
            except Exception as e:
                print_trace = True
                if isinstance(e, MaxRetryError) and isinstance(e.reason, TimeoutError):
                    message = (
                        "Connection to APM Server timed out "
                        "(url: %s, timeout: %s seconds)" % (self._url, timeout)
                    )
                    print_trace = False
                else:
                    message = 'Unable to reach APM Server: %s (url: %s)' % (
                        e, self._url
                    )
                raise TransportException(message, data, print_trace=print_trace)
            body = response.read()
            if response.status >= 400:
                if response.status == 429:  # rate-limited
                    message = 'Temporarily rate limited: '
                    print_trace = False
                else:
                    message = 'HTTP %s: ' % response.status
                    print_trace = True
                message += body.decode('utf8')
                raise TransportException(message, data, print_trace=print_trace)
            return response.getheader('Location')
        finally:
            if response:
                response.close()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号