使用带有龙卷风的HTTP POST发送JSON不起作用

时间:2018-11-08 20:42:23

标签: python-3.x tornado

im使用python3和龙卷风通过HTTP POST请求发送JSON,就像这样。

  

Server.py

@gen.coroutine
def getResponseWS(self, url, contentBody, method='POST'):
    import tornado.ioloop
    import tornado.web
    import tornado.options
    from tornado import gen
    from tornado.httpclient import HTTPClient
    from tornado.escape import json_decode, json_encode
    import json

    http_client = tornado.httpclient.AsyncHTTPClient()
    headers = {
               'Content-Type': 'application/json; charset=UTF-8'
           }
    simplejson = json.dumps(contentBody)
    #-------------------------------------------
    # contentBody = {"some_key": "some_value"}
    # url = 'http://some_ip_address:8088/testService'
    #
    baseLogger.info("Data to be send to webservice:%s" % simplejson)
    try:
        request = tornado.httpclient.HTTPRequest(url=url, method=method, headers=headers, body=simplejson)
        response = yield http_client.fetch(request)
        print("-------SERVICE RESPONSE-----------")
        print(response)
    except Exception as e:
        baseLogger.info("SERVICE RESPONSE:%s" % e)
        contentJson = {}

我不知道为什么它不起作用,我在邮递员上尝试了相同的请求,并且效果很好,并尝试了代码,我得到了以下响应:

  

控制台

11-08 16:14:01 BaseLogger  :INFO   IP:[127.0.0.1] -Data to be send to webservice:{"some_key": "some_value"}

-------SERVICE RESPONSE-----------
HTTPResponse(_body=None,buffer=<_io.BytesIO object at 0x7fda25fad048>,code=200,effective_url='http://some_ip_address:8088/testService',error=None,headers=<tornado.httputil.HTTPHeaders object at 0x7fda45a9d160>,reason='OK',request=<tornado.httpclient.HTTPRequest object at 0x7fda25f7db38>,request_time=0.8046760559082031,time_info={})

似乎工作正常,但响应应该是json,而不是。

1 个答案:

答案 0 :(得分:0)

在我看来,一切正常。 HTTPResponse是具有headersbody之类的属性的对象,但是其字符串形式不是很友好。您可能想要print(response.body)而不是响应对象本身。然后,您将看到服务器响应,可以使用json.loads(response.body)进行解析。