API의 URL이 요청 실패할 때 대처법 (addingPercentEncoding)

DevelopRecord·2022년 6월 1일
0

안녕하세요. 오늘은 URL을 요청할 때 발생할 수 있는 특정한 에러에 대해 알아볼 거예요.

물론 저도 이 에러때문에 조금 헤맸었어요. 분명 잘못된 부분이 없는 것 같은데 말이죠.

먼저 URL은 기본적으로 영어로 구성되어 있죠?

우리는 가끔 혹은 자주 URL 쿼리문이 변형이 필요할 때가 있죠.
(ex. 검색결과를 나타내기 위해 search 쿼리문 변경, API_KEY 등등)

이럴 때 영어가 검색쿼리가 영어가 들어가는 경우도 있지만,
한글이나 특수문자 등이 들어가는 경우도 많습니다.

URL이 무조건 한글이나 특수문자를 인식하지 못하지는 않지만 외국 사이트에서는 한글은 안되는 경우가 많겠죠?

이 경우에 URL(string: urlString)의 urlString이 nil로 값이 바뀌어 버리는 경우가 있어요.

그러면 요청에러(404)가 발생하고 데이터를 불러오지 못하겠죠? 그 때 해결방법 입니다.

먼저 URL 형식입니다.

let query = "애플"
let urlString = "https://www.google.com/search?q=\(query)"

물론 구글은 되지만 다른 안되는 사이트라는 가정하에...
이런 방식으로 했을 때 urlString 값이 nil이 반환될 수도 있어요.

URL Encoding

이 때 URL 인코딩 방식중에 하나인 .addingPercentEncoding(withAllowedCharacters: CharacterSet)을 사용합니다.

여기를 꼭 참고하세요! 중요합니다. 다양한 방식이 있어요.

이번엔 .urlHostAllowed를 사용해 볼게요.

guard let url = urlString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) else { return NetworkError.badUrl }
print(url) // %EC%95%A0%ED%94%8C

이런식으로 한국어나 특수문자는 인코딩이 되어 출력됩니다.
용도에 맞게 다른 방식도 사용하시면 좋을 것 같아요.

틀린 부분은 지적해주시면 감사하겠습니다.

애플 공식문서 1
애플 공식문서 2
티스토리

0개의 댓글