Python

[Python] Requests hooks - 매개변수 전달하기

비번변경 2024. 8. 15. 12:30

개요

2024.07.18-[Python] Requests hooks - 응답에 대한 콜백 구현하기에서 python requests를 사용하여 응답에 대한 콜백을 구현했는데, 이번 글에서는 콜백 함수에 매개변수를 함께 전달하는 방법을 몇 가지 살펴본다.

 

 

partial 활용

2022.10.19-[Python] functools.partial - 함수 재활용에서 살펴봤던 partial 함수는 전달받은 함수에 전달받은 인자값을 채워 넣은 함수를 생성할 때 사용한다. 따라서 hooks에 함수를 전달할 때 partial로 인자값이 채워진 함수를 전달할 수 있다. 다만 kwargs로만 참조할 수 있다.

 

콜백으로 수행할 함수를 다음과 같이 정의했다고 하자.

import requests
from functools import partial


def print_response(resp, *args, **kwargs):
    print(args)
    print(kwargs)
    print(resp.status_code)
    print(resp.json())

print_response를 hooks로 전달 시 다음과 같이 매개변수를 채워서 요청하면,

if __name__ == '__main__':
    requests.get('http://localhost:8888',
                 hooks={'response': partial(print_response, test='test_val')})

kwargs를 통해 전달한 변수를 접근할 수 있게 된다.

 

 

Factory

콜백함수의 정의/생성을 다른 함수에 위임하는 방식을 사용할 수도 있다. 아래 callback_factory라는 함수는 print_response 함수를 반환한다. print_response 함수는 callback_factory로 전달받은 test라는 변수에 접근하여 사용할 수 있다.

import requests

def callback_factory(test):
    def print_response(resp, *args, **kwargs):
        print(test)
        print(resp.status_code)
        print(resp.json())

    return print_response

이 방식은 요청 시 다음과 같이 hooks로 전달하면 된다.

if __name__ == '__main__':
    requests.get('http://localhost:8888',
                 hooks={'response': callback_factory('test_val')})

 

 

참고 문서

https://stackoverflow.com/questions/25115151/how-to-pass-parameters-to-hooks-in-python-grequests

https://onaeonae1.tistory.com/67