Skip to content

Instantly share code, notes, and snippets.

@bdkosher
Created March 6, 2015 18:59
Show Gist options
  • Select an option

  • Save bdkosher/d86024d93c7dfc75ffef to your computer and use it in GitHub Desktop.

Select an option

Save bdkosher/d86024d93c7dfc75ffef to your computer and use it in GitHub Desktop.
Groovy-based HTTP local proxy server heavily inspired by https://github.com/vert-x/vertx-examples/blob/master/src/raw/java/proxy/ProxyServer.java. To use, set other Java process's JAVA_OPTS: C:\dev\cp\PRPS\prps\prps-services>mvn install tomcat6:run -Ptomcat -Dhttp.proxyHost=localhost -Dhttp .proxyPort=8000
import org.vertx.groovy.core.*
String headersAsString(MultiMap headers) {
headers == null ? '' : headers.entries.collect({ e -> "$e.key : $e.value" }).join('\n')
}
String requestAsString(req) {
"$req.version $req.method $req.uri\n${headersAsString(req.headers)}\n\n"
}
String responseAsString(res) {
"$res.statusCode $res.statusMessage\n${headersAsString(res.headers)}\n${headersAsString(res.trailers)}\n"
}
vertx.createHttpServer().requestHandler { req ->
println "Proxying request:\n${requestAsString(req)}\n"
def client = vertx.createHttpClient().setHost(req.absoluteURI.host).setPort(req.absoluteURI.port == -1 ? 80 : req.absoluteURI.port)
def cReq = client.request(req.method, req.uri) { cRes ->
println "Proxying response:\n${responseAsString(cRes)}"
req.response.statusCode = cRes.statusCode
req.response.headers << cRes.headers
req.response.chunked = true
cRes.dataHandler { data ->
print data
req.response.write(data);
}
cRes.endHandler {
println '--end of response data--'
req.response.end()
}
}
cReq.headers << req.headers
cReq.chunked = true
req.dataHandler { data ->
print data
cReq.write(data)
}
req.endHandler {
println '--end of request data--'
cReq.end()
}
}.listen(8000)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment