{"id":36441869,"url":"https://github.com/rahulwa/camouflage","last_synced_at":"2026-01-11T21:59:45.165Z","repository":{"id":57528508,"uuid":"90486178","full_name":"rahulwa/camouflage","owner":"rahulwa","description":"An HTTP proxy server package","archived":false,"fork":false,"pushed_at":"2017-06-15T19:08:30.000Z","size":9,"stargazers_count":32,"open_issues_count":1,"forks_count":5,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-06-20T02:10:16.928Z","etag":null,"topics":["goproxy","http-proxy","mitmproxy","proxy"],"latest_commit_sha":null,"homepage":"https://godoc.org/github.com/rahulwa/camouflage","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rahulwa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-05-06T19:28:00.000Z","updated_at":"2024-02-21T12:05:44.000Z","dependencies_parsed_at":"2022-08-30T11:50:58.916Z","dependency_job_id":null,"html_url":"https://github.com/rahulwa/camouflage","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rahulwa/camouflage","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rahulwa%2Fcamouflage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rahulwa%2Fcamouflage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rahulwa%2Fcamouflage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rahulwa%2Fcamouflage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rahulwa","download_url":"https://codeload.github.com/rahulwa/camouflage/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rahulwa%2Fcamouflage/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28324783,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T18:42:50.174Z","status":"ssl_error","status_checked_at":"2026-01-11T18:39:13.842Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["goproxy","http-proxy","mitmproxy","proxy"],"created_at":"2026-01-11T21:59:44.569Z","updated_at":"2026-01-11T21:59:45.159Z","avatar_url":"https://github.com/rahulwa.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# camouflage\n\nAn HTTP proxy package for intercepting, modifying traffic and forwarding it via a reverse proxy server (like HAproxy).\n\nThis package is extended upon [elazarl's goproxy](https://github.com/elazarl/goproxy). Full functionality of it can be access through `GoProxy` variable, But `ctx.UserData` must not be altered. \n\n```go\npackage main\n\nimport (\n\t\"flag\"\n\t\"log\"\n\t\"net/http\"\n\t\"net/url\"\n\n\t\"github.com/elazarl/goproxy\"\n\t\"github.com/rahulwa/camouflage/proxy\"\n)\n\nfunc init() {\n\trProxyServer, err := url.Parse(\"http://127.0.0.1:8081\")\n\tif err != nil {\n\t\tlog.Fatal(\"main: init: unable to parse reverseproxyadress\")\n\t}\n\tproxy.Conf = \u0026proxy.Config{\n\t\tRedisControllerChannel: \"proxiesChannel\",\n\t\tReverseProxyServer:     *rProxyServer,\n\t\tProxyPort:              8080,\n\t\tMetricPort:             9099,\n\t\tVerbose:                false,\n\t\tDumpInWireFormat:       false,\n\t}\n\tflag.Parse()\n}\n\nfunc main() {\n  // This line will add X-GoProxy: yxorPoG-X header to all requests sent through the proxy. \n  proxy.GoProxy.OnRequest().DoFunc(\n    func(r *http.Request,ctx *goproxy.ProxyCtx)(*http.Request,*http.Response) {\n        r.Header.Set(\"X-GoProxy\",\"yxorPoG-X\")\n        return r,nil\n  })\n  // Start the proxy server \n  proxy.Proxy(nil, nil)\n}\n```\n\nFor more example, see [examples](https://github.com/rahulwa/camouflage/tree/master/examples/main) directory and [documentation](https://godoc.org/github.com/rahulwa/camouflage/proxy).\n\n## Features\n- supports regular HTTP proxy, HTTPS through CONNECT, and \"hijacking\" HTTPS connection using \"Man in the Middle\" style attack (thanks to goproxy).\n- requests and responses are fully customizable (thanks to goproxy).\n- send a tracking uuid with `X-Camouflage-Context` header on response.\n- proxy chaining with the help of any reverse proxy.\n- save/send requests and responses to nearly anywhere with the help of [fluentd](http://www.fluentd.org/). \n- metrics exposures via [prometheus-client](https://github.com/prometheus/client_golang/).\n- publishes json on the configured redis Channel - containing the destination site, reverse-proxy-server and status-code for each bad response happens from destination-site with the status code between 400 to 599 for real-time analysis or action.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frahulwa%2Fcamouflage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frahulwa%2Fcamouflage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frahulwa%2Fcamouflage/lists"}