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