6

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)
4

2 に答える 2

15

応答フックに渡す追加の引数を指定することはできません。追加情報を指定したい場合は、呼び出す関数を作成してから、フックとして渡される関数を返す必要があります。

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)]})
于 2014-08-04T20:20:57.513 に答える
2

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

お役に立てれば。

于 2015-01-10T07:35:25.177 に答える