:gem: Http Proxy Daemon
https://github.com/tarampampam/http-proxy-daemon.git
This application allows sending any HTTP requests throughout itself (proxying) using dynamic HTTP route, like http://app/proxy/https/example.com/file.json?any=param (request will be sent on https://example.com/file.json?any=param). By running this application on a remote server you can send requests to any resources "like from a server" from anywhere!
Download the latest binary file for your os/arch from [releases page] or use our [docker image] ([ghcr.io]).
Run proxy server:
$ ./http-proxy-daemon serve --port 8080 --prefix 'proxy'
Then send an HTTP request to the https://httpbin.org/get?foo=bar&bar&baz through our server:
$ curl -s -H "foo:bar" --user-agent "fake agent" 'http://127.0.0.1:8080/proxy/https/httpbin.org/get?foo=bar&bar&baz'
{
"args": {
"bar": "",
"baz": "",
"foo": "bar"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip",
"Foo": "bar",
"Host": "httpbin.org",
"User-Agent": "fake agent"
},
"origin": "8.8.8.8, 1.1.1.1",
"url": "https://httpbin.org/get?foo=bar&bar&baz"
}
[]
All supported image tags [can be found here] and here.
Run docker-container with a proxy server in background (detached) and listen for 8080 TCP port (incoming HTTP requests):
$ docker run --rm -d -p "8080:8080/tcp" tarampampam/http-proxy-daemon:X.X.X serve --port 8080
Important notice: do not uselatestapplication tag (this is bad practice). Use versioned tag (like1.2.3) instead.
Start this application in a docker-container:
$ docker run --rm --net host tarampampam/http-proxy-daemon:0.3.0 serve --port 8080
Start nginx beside:
$ docker run --rm --net host nginx:alpine
Next, run Apache Benchmark:
$ ab -kc 15 -t 90 'http://127.0.0.1:8080/proxy/http/127.0.0.1:80'
This is ApacheBench, Version 2.3 <$Revision: 1843412 %%CODEBLOCK5%%gt;
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests
Server Software: nginx/1.19.9
Server Hostname: 127.0.0.1
Server Port: 8080
Document Path: /proxy/http/127.0.0.1:80
Document Length: 612 bytes
Concurrency Level: 15
Time taken for tests: 7.469 seconds
Complete requests: 50000
Failed requests: 0
Keep-Alive requests: 50000
Total transferred: 44100000 bytes
HTML transferred: 30600000 bytes
Requests per second: 6694.38 [#/sec] (mean)
Time per request: 2.241 [ms] (mean)
Time per request: 0.149 [ms] (mean, across all concurrent requests)
Transfer rate: 5766.06 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 0 2 14.1 1 371
Waiting: 0 2 14.1 1 371
Total: 0 2 14.1 1 371
Percentage of the requests served within a certain time (ms)
50% 1
66% 2
75% 2
80% 2
90% 3
95% 5
98% 6
99% 7
100% 371 (longest request)
Hardware info:> $ cat /proc/cpuinfo | grep 'model name' > model name : Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz > model name : Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz > model name : Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz > model name : Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz > model name : Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz > model name : Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz > model name : Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz > model name : Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz > > $ cat /proc/meminfo | grep 'MemTotal' > MemTotal: 16261464 kB >
For application testing we use built-in golang testing feature and docker-ce + docker-compose as develop environment. So, just write into your terminal after repository cloning:
$ make test
Or build binary file:
$ make build
Changes log can be [found here].
If you will find any package errors, please, [make an issue] in current repository.
This is open-sourced software licensed under the MIT License.