반응형
오류 메세지
java.lang.IllegalArgumentException: method GET must not have a request body.
오류 발생 코드
val httpClient = OkHttpClient()
val formBodyBuilder = FormBody.Builder()
for(endpoint in endpointArray) {
formBodyBuilder.add(endpoint[KEY], endpoint[VALUE])
}
val request = Request.Builder().url(strURL)
.method("GET", formBodyBuilder.build()) // Exception!
.build()
okhttp의 2020년 2월 최신 버전인 3.11.0 기준으로 GET 방식 호출에서 body를 붙이는걸 허용해주지 않는다.
2014년 이전의 명세에 따르면 모든 HTTP 요청 메세지는 body를 포함할 수 있으나 GET에 대한 서버 시맨틱은 body 요청에 대한 의미가 없도록 제한된다.
즉, GET 요청에 body를 담아서 보낼 수는 있으나 유용하지 않다는 결론.
그러나 2014년부터는 http 스펙 명세에서 'GET 요청을 처리할 때 body 본문을 무시해야한다'라는 문구가 삭제되었고 body를 통한 payload 본문을 보내도 되는 것으로 바뀌었다.
하지만 새로운 사양이 적용되지 않은 라이브러리들은 아직까지 GET 요청에 body를 포함하는 것을 막기 때문에 웬만하면 GET 요청에는 body 사용을 피하는 것이 권장된다.
okhttp 라이브러리 또한 2014년 이전의 http 명세를 따르기 때문에 throw를 뱉어내는 것으로 보여진다.
해결책이라면 아래 링크에 편법이 기록되어 있는데 참고해보면 될듯.
https://stackoverflow.com/questions/43288236/get-request-with-request-body-in-okhttp
참고 자료
https://stackoverflow.com/questions/978061/http-get-with-request-body
반응형
'안드로이드' 카테고리의 다른 글
안드로이드 파일 복사 소스(자바) (0) | 2019.12.29 |
---|---|
requestFeature() must be called before adding content 오류 (0) | 2019.12.26 |