Skip to content

Instantly share code, notes, and snippets.

@erdos
Created September 8, 2022 20:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save erdos/6050a6e3efe23adb4321e14785dc0318 to your computer and use it in GitHub Desktop.
Save erdos/6050a6e3efe23adb4321e14785dc0318 to your computer and use it in GitHub Desktop.
(ns cljproxy
(:require [org.httpkit.client :as client]
[org.httpkit.sni-client]
[org.httpkit.server :as server]))
;; minimalist local proxy for development
;; Usage: TARGET=https://erdos.dev PORT=8081 bb core.clj
(def target-root (doto (System/getenv "TARGET") assert))
(def port (doto (System/getenv "PORT") assert))
(alter-var-root #'org.httpkit.client/*default-client* (constantly org.httpkit.sni-client/default-client))
(defn request->params [request]
(let [headers (dissoc (:headers request) "host" "referer")]
{:method (keyword (:request-method request))
:url (str target-root (:uri request))
:headers headers
:insecure? true
:body (:body request)}))
(defn map-response [response]
{:status (:status response)
:headers {"content-type" (:content-type (:headers response))}
:body (:body response)})
(defn handler [request]
(let [params (request->params request)
respond @(client/request params)]
(if-let [err (:error respond)]
(println :ERROR err))
(map-response respond)))
(println "Starting server")
(server/run-server handler {:port 8081})
(read-line)
(println "Stopped server")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment