-
[TroubleShooting] API KEY 인코딩 문제 (SERVICE KEY IS NOT REGISTERED ERROR )Archive/Log 2021. 3. 8. 22:01728x90
어쩌면?! ㅎ
처음으로 공공데이터를 사용 하게 되었다..
다행히도 공공데이터 포털이다 보니 많은 분들의 시도와 노고로 인해 얻을 수 있는 정보가 많았다.
내가 직면 한문제는 ..
분명 포스트 맨으로 정상 동작하는 API 쿼리가
코드에서 돌리면 자꾸
SERVICE KEY IS NOT REGISTERED ERROR
가 발생하는 문제가 있었다.
위 처럼 String으로 입력한 Key 값이 변형된걸 볼수 있다.
let config = URLSessionConfiguration.default let session = URLSession(configuration: config) var urlComponents = URLComponents(string: "API 주소") let api_key = "문제의 KEY 값" let serviceKey = URLQueryItem(name: "ServiceKey", value: api_key) let solYear = URLQueryItem(name: "solYear", value: "1991") let solMonth = URLQueryItem(name: "solMonth", value: "04") let solDay = URLQueryItem(name: "solDay", value: "10") urlComponents?.queryItems = [serviceKey, solYear, solMonth, solDay] let requestURL = urlComponents?.url
위 코드는 단순히 쿼리로 입력한 양력 또는 음력 데이터를 변형해서 리턴 받는 API이다..
구글링을 통해 보니.. 이런 경우 일차적으론 KEY값 문제라고 해서..
와우 맞아요!!
하면서 알아보니 해당 문제는 공공데이터 포털에서 제공하는 KEY값이 이미 인코딩 된 값을 제공하기 때문 이라고 한다.
애초에 한글 쿼리 같은것 처리 위해서 URLQueryItem()에 입력할때 자동으로 인코딩 되는데
이미 인코딩 된 KEY값이 한번 더 인코딩 되는 것이다..
그래서 복사해온 KEY값을 한번 Decoding 해주면 다시 인코딩되서 원하는 값으로 처리가 되므로
// ... let api_key = "문제의 KEY 값" let api_key_decoded = api_key.removingPercentEncoding let serviceKey = URLQueryItem(name: "ServiceKey", value: api_key_decoded) let solYear = URLQueryItem(name: "solYear", value: "1991") // ...
이렇게 코드를 한번 Decoding 작업을 해주었더니...
정상적으로 KEY가 출력되고 원하던 리턴 값을 얻어냈다..
조금 더 구글링 하다보니 많은 분들이 자연스럽게 코드를 extention 해서 자연스럽게 처리하시는 코드를 배워왔다..
extension String { func decodeURL() -> String? { return self.removingPercentEncoding } func encodeURL() -> String? { return self.addingPercentEncoding( withAllowedCharacters: NSCharacterSet.urlQueryAllowed) } } // ... let api_key = "인코딩 처리된 KEY" let api_key_decode = api_key.decodeURL() // ...
728x90'Archive > Log' 카테고리의 다른 글
[Book] 한번에 10권 플랫폼 독서법 - 김병완 저 (1) 2023.05.15 [Xcode] Could not find or use auto-linked library 'XCTestSwiftSupport' / warning: Could not find or use auto-linked framework 'XCTest' 오류 발생 (0) 2022.05.31 [Xcode]Multi-Cursor Editing (0) 2021.04.12 [Xcode] 알고리즘을 공부를 위한 Commend Line Tool 생성방법 (0) 2020.08.18