我有以下代码:
import requests
s = requests.Session()
r = s.post(AUTHENTICATION_URI, data=form_data, headers=headers)
其中form_data和headers是输入的字典。这使用请求正确返回状态为200并且是正确的(我稍后可以在我的代码中使用该会话)。
我正在尝试将此转换为使用龙卷风及其http客户端,但是当我运行时:
from urllib.parse import urlencode
from tornado import httpclient
http_client = httpclient.HTTPClient()
response = http_client.fetch(
httpclient.HTTPRequest(
AUTHENTICATION_URI, method='POST', request_timeout=60, body=urlencode(form_data), headers=headers))
我遇到了超时:
tornado.httpclient.HTTPError: HTTP 599: Timeout during request
tornado HTTPRequest对象有一个可选的超时参数,但即使是60秒似乎也无法解决问题。
我如何构建龙卷风帖子请求以便使用请求http模块重新创建我的运行方式?
答案 0 :(得分:1)
http_client.fetch
未返回response
,它会返回一个解析为响应的Future
。您需要使用async def
在response = await http_client.fetch(...)
函数中调用它。您还必须启动IOLoop
,而不是做任何事情来阻止它。如果这些都没有指向正确的方向,那么您需要共享更完整的代码示例。