갑자기 스크랩이 안 되면서 HTTP 411 에러가 발생했다
스크랩은 잘 되다가도 어느날 실행해보면 4xx 에러가 자주 발생하는데, 이유는 보통 추가된 요청 데이터이다
무슨 말인지 싶겠지만 말 그대로 HTTP Request에 body부분 데이터가 추가된 것이다
우선 의심가는 부분에 중단점을 걸고 디버깅을 시도했다

200(정상)을 받아야 했으나 411 응답을 받은 것을 알 수 있다
보통 4xx번대 에러는 Client단에서의 요청 에러이기 때문에 요청에 문제가 있는지부터 확인하면 된다
그럼 상태코드 411이 무엇인지 알 필요가 있다
그렇다면 어떻게 알 수 있냐?
에러에 관련해서 검색하면 되죠 다 나오는데.

간단히 말하면 콘텐츠 길이(Content-Length) 헤더없이 요청을 보냈으니 서버는 수락하지 않는다는 뜻이다
(처음엔 Request body에 데이터가 추가되었나 추측을 했지만 411 에러의 뜻과 같이 헤더 부분이 문제인거니 포스트맨을 통해 헤더부터 확인해봤다)
그렇다면.. 요청에 콘텐츠 길이를 포함하면 되겠네? 싶어서 추가해줬다
추가하는김에 혹시 몰라 필요한 다른 모든 헤더들을 추가해줬다

그런데..
411 에러를 응답 받았다
이유는 형식적인 길이만 보낸거지 정확히 body부의 길이를 구해 보낸 것이 아니기 때문에 에러가 발생한 것이다
OutputStream을 이용한 body 설정
OutputStream os = con.getOutputStream();
os.write(urlParameters.getBytes("UTF-8"));
os.close();
※ 위 코드를 작성 시엔 필히 setDoOutput(true); 밑에 적어야 한다
바이트기반 출력 스트림을 이용하여
urlParameters를 UTF-8형식의 바이트코드로 내보낸다는 뜻이다
그리고 close() 메서드를 통해 반드시 OutputStream을 종료한다
urlParameters 변수가 body가 되는데, 여기선 요청 데이터인 body부분이 비어있으므로 더블쿼터("")로 내보내면 끝.
비어있으니 Content-Length 헤더도 굳이 넘길 필요가 없어진다
그럼 이전에 추가해줬던 setRequestProperty 속성들도 싹다 지워주면 됨

사이트가 업데이트 됨에 따라 그에 맞게 처리를 추가하거나 수정해주면 돼서 어렵진 않다 유지보수 또한 당연한 개발자의 몫이다
문제에 대해 파악을 한 후에 접근을 하는 것이 개발 시간을 줄일 수 있다
'제작(Making) > 스프링(Spring)' 카테고리의 다른 글
N사 뉴스 스크래핑 (0) | 2022.09.28 |
---|