Python请求:挂钩还是没挂钩?

时间:2013-07-21 13:51:25

标签: python python-2.7 request python-requests python-2.x

.get '请求并处理响应,如:

resp = requests.get('url')
resp = resp.text
.. # do stuff with resp

在阅读了包的文档之后,我发现有一个钩子功能可以让我这样做:

def process_r(resp, **kwargs): .. do stuff with resp

resp = requests.get('url', hooks = {'response': process_r})

我的问题:

我什么时候应该使用挂钩?或者,我为什么要使用钩子?

我希望在使用请求resp.text过程返回请求的响应后启动一个对象(解析器)。

这种场景的Pythonic,正确方法是什么?

谢谢

1 个答案:

答案 0 :(得分:7)

钩子离“魔法”不到一百万英里。它们会使你的代码有可能做出令其他人感到惊讶的事情(从而违反“明确比隐含更好”)。

因此,钩子应该仅用于驱动行为,使更多可预测,而不是更少。例如,请求在内部使用handle 401 responses进行各种身份验证。

因此,您应该受到钩子限制的指导。钩子需要返回Response对象的relevant part of the documentation状态。这会导致一些明显的可能行为:你可以发出额外的请求(比如上面的401钩子),或者你可以用某种方式改变Response

启动解析器正是你不应该用钩子做的事情。它应该是您业务逻辑的一部分。我会写一个实用函数。