根据Requests文档,可以将事件挂钩添加到.get()函数中。
requests.get('http://httpbin.org', hooks=dict(response=print_url))
def print_url(r, *args, **kwargs):
print(r.url)
这很好但是如何使用自定义参数设置* args,例如,我想将一些自定义值传递给print_url(),如何在* args中设置它们?这样的事情失败了:
args = ("search_item", search_item)
rs = (grequests.get(u, hooks={'response': [parse_books],'args': [args]}) for u in urls)
答案 0 :(得分:11)
您无法指定传递给响应挂钩的额外参数。如果你想要指定额外的信息,你应该创建一个你调用的函数,然后返回一个作为钩子传递的函数,例如,
def hook_factory(*factory_args, **factory_kwargs):
def response_hook(response, *request_args, **request_kwargs):
# use factory_kwargs
# etc.
return None # or the modified response
return response_hook
grequests.get(u, hooks={'response': [hook_factory(search_item=search_item)]})
答案 1 :(得分:1)
response_hook
函数必须返回响应对象。最简单的解决方法是
修改你从hook_factory调用钩子的respose对象。
def response_hook(response, *request_args, **request_kwargs):
# use factory_kwargs
# etc.
response.meta1='meta1' #add data
response.meta2='meta2'
#etc.
return response# or the modified response
return response_hook
希望这会有所帮助。