Framework/Django

HTTP POST 요청 시 headers 매개변수

JM Lee 2024. 1. 1. 03:42
728x90

HTTP 요청에 헤더를 포함하는 것은 일반적으로 API 요청에서 사용자 인증이나 기타 정보를 전달하기 위한 표준적인 방법이다. Cloudflare API는 클라우드플레어 계정의 특정 작업을 수행하기 위해 사용자를 인증하는 데에 헤더의 Authorization 필드를 사용하고 있다.

 

아래 예시 코드를 작성하면서 공부하였다.

class UserAvatarGetUploadURLView(APIView):
    def post(self, request):
        """GetUploadURL.post

        사용자가 사진을 첨부해서 클라우드플레어에 전송하기전에 먼저 일회용 업로드 url을 요청합니다.

        Args:
            url (str): 클라우드플레어에서 미리 지정한 일회용 url 요청 링크
            one_time_url (str): post요청이 성공할 경우 클라우드플레어에서 온 response. 일회용 업로드 url을 포함하고 있습니다.
        return:
            result(str)): 일회용 url

        """
        url = f"https://api.cloudflare.com/client/v4/accounts/{settings.CF_ID}/images/v2/direct_upload"
        one_time_url = requests.post(
            url,
            headers={
                "Authorization": f"Bearer {settings.CF_TOKEN}",
            },
        )
        one_time_url = one_time_url.json()
        result = one_time_url.get("result")
        return Response(result)

 

이미지 등록 시 프로세스를 보다 효과적이고 안전하게 하기 위해 Cloudflare를 이용하였다.

이 과정에서 one_time_url이라는 변수를 만들었는데, requests.post를 통해 HTTP POST 통신을 하고자 했다. 이는 POST 통신이 원활하게 이루어지는 경우에만 잘 작동하는데, headers에 숨긴 사용자 토큰(CF_TOKEN)을 넣어 보낸다. 클라우드플레어에서는 요청 url에 CF_ID 계정을 넣었기 때문에 이러한 동작이 가능하였다.

클라우드플레어와 같이 토큰 등을 통한 인증이 필요할 시에는 다음과 같은 구조를 사용하여 보안, 인증 문제를 해결해주면 좋을 듯하다.