KDY

Authorization header is invalid -- one and only one ' ' (space) 본문

Android 오류

Authorization header is invalid -- one and only one ' ' (space)

daeyeong 2022. 9. 6. 17:58

이번에 s3서버로 이미지를 업로드하는 과정에서 얻은 오류이다. 

구글링을 해도 잘 해결법이 잘 안 나왔던 관계로 해결 과정을 정리해 봅니다.

서버에 요청을 보냈을때 이러한 오류가 발생했습니다.

처음에는 요청시 Header값이 안 들어가서 나타나는 오류인 줄 알았습니다. 

하지만 이 오류는 Request요청 Url에 쓸모없는 ' ' 값이 들어가서 나타나는 오류였습니다.

 

그럼 제가 이 오류를 해결한 방법을 알려 드리겠습니다.

 

저의 경우 POST맨으로 요청 시에는 정상적으로 작동을 했습니다. 

하지만 Android에서 같은 조건으로 Request요청 시 위와 같은 오류가 났습니다.

 

오류의 원인은 Requset 요청시 URl Encoding 되어 요청되었기 때문입니다.

EX)

Encoding전 Encoding후
2022/20220829_190735.jpg?Content-Type=image%2Fjpeg&X-Amz-Algorithm= 2022%2F20220829_190735.jpg%3FContent-Type=image%252Fjpg&X-Amz-Algorithm=

이런식으로 URL이 변경되면서 오류가 났습니다. 

 

해결법은 간단 했습니다.

url부분에 encoded = true를 넣어주시면 됩니다.

하지만 저는 코드를 넣어줘도 ?가 %3F로 나와서 따로 변경을 해줬습니다.

 

따로 Okhttp를 사용하여 적용했습니다.

internal class MyInterceptor : Interceptor {
    @Throws(IOException::class)
    override fun intercept(chain: Interceptor.Chain): Response {
        val request: Request = chain.request()
        var stringurl = request.url.toString()
        stringurl = stringurl.replace("%3F", "?")
        val newRequest: Request = Request.Builder()
            .url(stringurl)
            .build()
        return chain.proceed(newRequest)
    }
}
okHttpClient = OkHttpClient.Builder()
    .addInterceptor(MyInterceptor())
    .build()

이런식으로 Okhttp에 추가 해주면 %3F 문자가 ?로 가게 됩니다.

 

Reference


https://kanoos-stu.tistory.com/56

 

[Android] Retrofit 요청 시 url 인코딩 안 되게 하기

문제 retrofit으로 RestAPI 요청 작업 시 url에 서비스키(accessKey)가 들어가야하는 경우가 종종 있는데 이 때, 서비스키에 = 또는 + 와 같이 인코딩 시 문자가 바뀌어 요청이 되어 에러를 발생하게 된다.

kanoos-stu.tistory.com

https://stackoverflow.com/questions/18336539/authorization-header-is-invalid-one-and-only-one-space-required-amazo