我正试图开始使用treq库的一些示例代码,但收效甚微。虽然很容易获得状态代码和响应的一些其他属性,但获取响应的实际文本会更困难一些。此示例代码中提供的print_response函数不存在于我的版本中:
from twisted.internet.task import react
from _utils import print_response
import treq
def main(reactor, *args):
d = treq.get('http://httpbin.org/get')
d.addCallback(print_response)
return d
react(main, [])
这是追溯:
Traceback (most recent call last):
File "test.py", line 2, in <module>
from _utils import print_response
ModuleNotFoundError: No module named '_utils'
我不确定从哪里开始......任何帮助都会非常感激。
答案 0 :(得分:4)
现在我看一下,这个例子非常糟糕,特别是如果你是新来的扭曲。请试一试:
import treq
from twisted.internet import defer, task
def main(reactor):
d = treq.get('https://httpbin.org/get')
d.addCallback(print_results)
return d
@defer.inlineCallbacks
def print_results(response):
content = yield response.content()
text = yield response.text()
json = yield response.json()
print(content) # raw content in bytes
print(text) # encoded text
print(json) # JSON
task.react(main)
您唯一需要知道的是.content()
,.text()
,.json()
返回最终返回响应正文的Deferred
个对象。因此,您需要yield
或执行回调。
假设你只想要文字内容,你可以这样:
def main(reactor):
d = treq.get('https://httpbin.org/get')
d.addCallback(treq.text_content)
d.addCallback(print) # replace print with your own callback function
return d
treq.content()
系列功能可让您轻松返回内容,如果您关注的内容,并使用它进行操作。