博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
异步客户端
阅读量:5818 次
发布时间:2019-06-18

本文共 2712 字,大约阅读时间需要 9 分钟。

# coding=utf-8# pylint:disable=invalid-name, len-as-condition"""Async http client"""import jsonimport loggingimport socketfrom tornado import genfrom tornado.httpclient import AsyncHTTPClient, HTTPErrorfrom tm.util.tm_exception import TMException_LOG = logging.getLogger(__name__)class AsyncHttpClient(object):    """Async http client"""    def __init__(self):        param_dict = {
"request_timeout": 10} self.__http_client = AsyncHTTPClient(None, defaults=param_dict) self.__protocol_prefix = "http://" self.__default_headers = {
"Content-type": "application/json"} @gen.coroutine def post(self, url, headers=None, body=None): """Post""" resp = yield self.__fetch("POST", url, headers) raise gen.Return(resp) @gen.coroutine def get(self, url, headers=None): """Get""" resp = yield self.__fetch("GET", url, headers) raise gen.Return(resp) @gen.coroutine def delete(self, url, headers=None): """与get相同""" pass @gen.coroutine def put(self, url, headers=None, body=None): """与post相同""" pass @gen.coroutine def __fetch(self, url, request_type, headers=None, body=None): try: if body: body = json.dumps(body) url = self.__protocol_prefix + url resp = yield self.__http_client.fetch(url, method=request_type, headers=headers, body=body) return_value = (resp.code, json.loads(resp.body)) raise gen.Return(return_value) except HTTPError as http_error: err_msg = self.__log_error(http_error) raise gen.Return((http_error.code, err_msg)) except socket.error as e: _LOG.exception(e) raise gen.Return((503, str(e))) def __log_error(self, http_error): # pylint:disable=no-self-use err_msg = "Error info: %s \r\n" % str(http_error) if http_error.response: err_msg += "Body: %s \r\n" % str(http_error.response.body) _LOG.error(err_msg) if http_error.response: return json.loads(http_error.response.body) else: return str(http_error)def _check_resp(http_code, result): err_msg = "" if http_code != 201 and http_code != 200: err_msg += "Failed to connect to server.\r\n" else: if isinstance(result, dict): err_msg += result.get("error", "") else: err_msg += "Response body type is not dict.(%s)\r\n" % str(result) if err_msg: _LOG.error('Response: http_code: %d, result: %s', http_code, result) raise TMException(err_msg)

 

posted on
2018-09-04 08:09 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/wenlin-gk/p/9582311.html

你可能感兴趣的文章
编玩边学获数千万元A轮融资,投资方为君联资本
查看>>
蓝图(Blueprint)详解
查看>>
Spark之SQL解析(源码阅读十)
查看>>
Android图片添加水印图片并把图片保存到文件存储
查看>>
比特币系统采用的公钥密码学方案和ECDSA签名算法介绍——第二部分:代码实现(C语言)...
查看>>
海贼王十大悲催人物
查看>>
BigDecimal 舍入模式(Rounding mode)介绍
查看>>
开源 免费 java CMS - FreeCMS1.2-标签 infoSign
查看>>
开源 免费 java CMS - FreeCMS1.9 移动APP生成栏目列表数据
查看>>
虚拟机新增加硬盘,不用重启读到新加的硬盘
查看>>
Java IO流详尽解析
查看>>
邮件服务系列之四基于虚拟用户的虚拟域的邮件系统(安装courier-authlib以及部分配置方法)...
查看>>
Linux VSFTP服务器
查看>>
DHCP中继数据包互联网周游记
查看>>
Squid 反向代理服务器配置
查看>>
Java I/O操作
查看>>
Tomcat性能调优
查看>>
项目管理心得
查看>>
Android自学--一篇文章基本掌握所有的常用View组件
查看>>
灰度图像和彩色图像
查看>>