Clojure:
Wysyłanie żądania HTTP
How to:
W Clojure wysyłanie żądania HTTP jest łatwe. Użyjemy popularnej biblioteki clj-http
. Zainstaluj ją, dodając do twojego project.clj
:
[clj-http "3.12.3"]
Oto przykład żądania GET:
(require '[clj-http.client :as client])
(let [response (client/get "https://httpbin.org/get")]
(println (:status response))
(println (:headers response))
(println (:body response)))
Odpowiedź:
200
{...headers...}
{
"args": {},
"headers": {
"Host": "httpbin.org",
...
},
"origin": "...",
"url": "https://httpbin.org/get"
}
A tu przykład POST z danymi:
(let [response (client/post "https://httpbin.org/post"
{:form-params {:foo "bar" :baz "qux"}})]
(println (:status response))
(println (:body response)))
Odpowiedź:
200
{
"args": {},
"data": "",
"files": {},
"form": {
"foo": "bar",
"baz": "qux"
},
"headers": {
...
},
"json": null,
"origin": "...",
"url": "https://httpbin.org/post"
}
Deep Dive
Wysyłanie żądań HTTP nie jest nowością. Powstało wraz z HTTP w 1991 roku. Alternatywą dla clj-http
może być http-kit
lub niskopoziomowe java.net.HttpURLConnection
. Wybór narzędzia zależy od potrzeb projektu: clj-http
jest łatwy w obsłudze, http-kit
jest szybki, a HttpURLConnection
daje pełną kontrolę nad żądaniem.
Implementacja w clj-http
opiera się na bibliotece Apache HttpComponents
. Dzięki temu obsługuje funkcje takie jak:
- Automatyczne przekierowania.
- Obsługa ciasteczek.
- Zarządzanie sesjami.
Zrozumienie, jak w Clojure obsługuje się asynchroniczność i strumienie danych, może być kluczowe przy obsługiwaniu większych odpowiedzi serwera lub wysyłaniu dużych żądań.
See Also
- Biblioteka
clj-http
: https://github.com/dakrone/clj-http - Dokumentacja
http-kit
: http://www.http-kit.org - Poradnik
java.net.HttpURLConnection
: https://docs.oracle.com/javase/tutorial/networking/urls/readingWriting.html