【发布时间】:2022-09-24 00:53:22
【问题描述】:
我正在通过在后端使用tornado 来开发请求方法。它应该执行获取请求并进行回调,但是我似乎无法返回响应结果。
例如,如果我返回 response.body,这将打印出插入到 HTTPRequest 方法中的 body 参数,而不是返回响应。
这是我的脚本:
class getToken(tornado.web.RequestHandler):
def __init__(self,url: str, params: str, headers: dict):
#super(tornado.web.RequestHandler, self).__init__(*args, **kwargs)
self._client = tornado.httpclient.AsyncHTTPClient()
self._url = url
self._body = params
self._headers = headers
def response(response):
return response.request
@tornado.gen.coroutine
def _request(self, callback, request):
try:
response = yield self._client.fetch(request)
except tornado.httpclient.HTTPError as e:
response = e.response
raise tornado.gen.Return(
callback(
self.response(
response
)
)
)
def get_request(self, callback):
response = tornado.httpclient.HTTPRequest(self._url,
method = \'GET\',
headers = self._headers,
body = data)
print(response.body)
return self._request(
callback,
response)
我使用以下内容运行此脚本:
headers = {
\'Content-Type\': \'application/x-www-form-urlencoded\',
}
url = \'https://query1.finance.yahoo.com/v8/finance/chart/BOIL.L\'
params = \'region=GB&lang=en-GB&includePrePost=false&interval=2m&useYfid=true&range=1d&corsDomain=uk.finance.yahoo.com&.tsrc=finance\'
r = getToken(url = url, params=params, headers=headers)
print(r.get_request(Future.add_done_callback))
结果:
b\'region=GB&lang=en-GB&includePrePost=false&interval=2m&useYfid=true&range=1d&corsDomain=uk.finance.yahoo.com&.tsrc=finance\'
<Future pending cb=[coroutine.<locals>.wrapper.<locals>.<lambda>() at /Users/usr/yahoo/venv/lib/python3.8/site-packages/tornado/gen.py:251]>
响应应该返回一个字典格式,虽然我有点担心为什么未来是悬而未决的。