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,而不是。
答案 0 :(得分:0)
在我看来,一切正常。 HTTPResponse是具有headers
和body
之类的属性的对象,但是其字符串形式不是很友好。您可能想要print(response.body)
而不是响应对象本身。然后,您将看到服务器响应,可以使用json.loads(response.body)
进行解析。