Skip to content

Instantly share code, notes, and snippets.

@DBassel
Forked from rklaehn/Proxy.scala
Created November 10, 2017 05:51
Show Gist options
  • Save DBassel/4c0906ce720c6867ac5a0ce7454f6d91 to your computer and use it in GitHub Desktop.
Save DBassel/4c0906ce720c6867ac5a0ce7454f6d91 to your computer and use it in GitHub Desktop.
Minimal akka http proxy
package akkahttptest
import akka.actor.ActorSystem
import akka.http.Http
import akka.stream.FlowMaterializer
import akka.http.server._
import akka.http.marshalling.PredefinedToResponseMarshallers._
import akka.stream.scaladsl.{HeadSink, Source}
object Proxy extends App {
implicit val system = ActorSystem("Proxy")
implicit val materializer = FlowMaterializer()
implicit val ec = system.dispatcher
val proxy: Route = Route { context =>
val request = context.request
println("Opening connection to " + request.uri.authority.host.address)
val flow = Http(system).outgoingConnection(request.uri.authority.host.address, 80).flow
Source.single(context.request)
.via(flow)
.runWith(HeadSink())
.flatMap(r => context.complete(r))
}
val binding = Http(system).bind(interface = "localhost", port = 1080)
binding.startHandlingWith(proxy)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment