clj-http 사용하기
다른 api호출을 할 때, clj-http 라이브러리를 많이 쓰게 되는데 사용하면서 안되었던 점/해결방법을 기록차 남긴다.
get 사용시, ‘‘:query-params’ 사용하기
:query-params 의 값으로 키워드
로 이뤄진 맵을 썼더니, 동작을 안했다.
그래서 되는데로, request url에 str함수로 파라미터를 붙여서 쓰곤 했다.
알보고니 값을 키워드
로 쓰면 안되고(키
는 상관 없다.), 다음과 같이 스트링으로 쓰면 아주 잘 보내진다.
대부분 request내부의 맵이 스트링으로 넘어오기 때문에, 그대로 넘기면 된다.
;;[clj-http "2.2.0"]
;;[clj-http.client :as client]
;; 쿼리 파라미터 ?q=test 을 표현하고 싶었다.
(client/get request-url {:query-params {:q :test}}) ;; 이렇게 하면 앙 뎀
(client/get request-url {:query-params {:q "test"}}) ;; 이렇게 하면 잘 됨
(client/get request-url {:query-params {"q" "test"}}) ;; 이렇게 해도 잘 됨
응답을 json으로 받으려면?
다음과 같이 default-option같은 것은 만들어 두고, 다른 옵션과 함께 merge해서 쓰면 편리하다.
(def default-option {:accept :json
:content-type :json
:as :json})
;; option 없을 때
:body "{\n \"result\": \"1.0.0.453\"\n}"
;; 있을때
:body {:result "1.0.0.453"}
;;최종
(client/get request-url (merge {:query-params {"q" "test"}} default-option)) ;; 이렇게 하면 잘 됨
기타
http를 요청하던 중에는 가끔 에러들이 나는데
...... :reason-phrase "Not Found" .......
이런 에러를 봤을 때는 http 요청이 잘못되었던 거, 다양한 이유가 있겠지만 url마지막에 “/”이 포함되었는지 확인해보자.