Converting CURL header to Clojure map
Code
;; curl_headers.clj
(use '[clojure.java.shell :only [sh]])
(require '[clojure.string :as str])
;; Got both below functions from
;; https://stackoverflow.com/questions/31138653/clojure-idiomatic-way-to-write-split-first-and-split-last
(defn split-first [s re]
(str/split s re 2))
(defn split-last [s re]
(let [pattern (re-pattern (str re "(?!.*" re ")"))]
(split-first s pattern)))
(defn string-to-map [s re]
(let [[k v] (map #(str/trim %) (split-first s re))]
{k v}))
(defn curl-header-to-map [s]
(let [lines (str/split s #"\n")
first_line (first lines)
rest_of_lines (rest lines)
[protocol status] (str/split first_line #"\s+")
rest_of_lines_to_map (apply merge (map #(string-to-map % #":") rest_of_lines))]
(merge {"protocol" protocol "status" status} rest_of_lines_to_map)))
;; curl -X HEAD -I https://something.com
;; (def curl-header (slurp "curl_output.txt"))
(defn curl-headers [url]
(curl-header-to-map (:out (sh "curl" "-X" "HEAD" "-I" url))))
(curl-headers "https://something.com")
(get (curl-headers "https://something.com") "content-type")
(get (curl-headers "https://bafybeiglw52c2scnonhlemktgtmj4y3ufvsqg24bdf4fbqg7padhqpxz3q.ipfs.nftstorage.link/clohure_diary_round_logo.svg") "content-type")
(get (curl-headers "https://mindaslab.github.io/me.jpg") "content-type")