1

I have a route defined as:

(POST "/login" [req] req)

in my httpkit server. I wanted to test this route so I tried to use:

(client/post "http://localhost:3000/login" {})

using clj-http.client, but I just get error 403 (forbidden) when I attempt to run it (in calva). Any one have any ideas? Works fine for GET routes!

EDIT: As the request of @cfrick, here is a MRE:

server.clj

(ns api.server
  (:require [org.httpkit.server :as server]
            [compojure.core :refer [defroutes GET POST]]
            [ring.middleware.defaults :as default])

(defn auth-start [req]
  {:status 200
     :headers {"Content-Type" "text/html"}
     :body  "<h1> logged-in </h1>"})

(defroutes app-routes
  (GET "/" [] "<h1> Hello </h1>")
  (POST "/login" [req] auth-start) 
  (route/not-found "Error, page not found!"))

(defn -main
  "This is our main entry point"
  [& args]
  (let [port (Integer/parseInt (or (env :PORT) "3000"))]
    ; Run the server with Ring.defaults middleware
    (server/run-server (default/wrap-defaults #'app-routes default/site-defaults) {:port port})
    ; Run the server without ring defaults
    ;(server/run-server #'app-routes {:port port})
    (println (str "Running webserver at http://127.0.0.1:" port "/"))))

test.clj

(ns api.test
  (:require [clj-http.client :as client]))

(client/post "http://localhost:3000/login" {})

project.clj dependencies:

:dependencies [[org.clojure/clojure "1.11.1"]
                 ; Compojure - A basic routing library
                 [compojure "1.6.1"]
                 ; Our Http library for client/server
                 [http-kit "2.3.0"]
                 ; Ring defaults - for query params etc
                 [ring/ring-defaults "0.3.2"]
                 ; For testing api routes
                 [clj-http "3.12.3"]]
Jack Gee
  • 136
  • 6

0 Answers0