A HTTP Proxy server in Crystal with support HTTP3 to google domains when plain text HTTP
442
A HTTP Proxy server and client written in Crystal
Add this to your application's shard.yml:
dependencies:
http_proxy:
github: mamantoha/http_proxy
require "http_proxy"
host = "127.0.0.1"
port = 8080
server = HTTP::Proxy::Server.new(host, port)
server.bind_tcp(port)
puts "Listening on http://#{server.host}:#{server.port}"
server.listen
require "http_proxy"
require "option_parser"
host = "192.168.0.1"
port = 3128
OptionParser.parse! do |opts|
opts.on("-h HOST", "--host HOST", "define host to run server") do |opt|
host = opt
end
opts.on("-p PORT", "--port PORT", "define port to run server") do |opt|
port = opt.to_i
end
end
server = HTTP::Proxy::Server.new(host, port, handlers: [
HTTP::LogHandler.new,
]) do |context|
context.perform
end
server.bind_tcp(port)
puts "Listening on http://#{server.host}:#{server.port}"
server.listen
server = HTTP::Proxy::Server.new("127.0.0.1", 8080, handlers: [
HTTP::LogHandler.new,
HTTP::Proxy::Server::BasicAuth.new("user", "passwd"),
]) do |context|
context.request.headers.add("X-Forwarded-For", "127.0.0.1")
context.perform
end
Make HTTP request:
Note: you should send full URL instead of path when using HTTP proxy.
require "http_proxy"
proxy_client = HTTP::Proxy::Client.new("127.0.0.1", 8080)
uri = URI.parse("http://httpbin.org")
client = HTTP::Client.new(uri)
client.set_proxy(proxy_client)
response = client.get("http://httpbin.org/get")
require "http_proxy"
proxy_client = HTTP::Proxy::Client.new("127.0.0.1", 8080)
uri = URI.parse("https://httpbin.org")
response = HTTP::Client.new(uri) do |client|
client.set_proxy(proxy_client)
client.get("/get")
end
uri = URI.parse("http://httpbin.org")
proxy_client = HTTP::Proxy::Client.new("127.0.0.1", 8080, username: "user", password: "passwd")
response = HTTP::Client.new(uri) do |client|
client.set_proxy(proxy_client)
client.get("http://httpbin.org/get")
end
puts response.status_code
puts response.body
Content type
Image
Digest
Size
10.4 MB
Last updated
over 6 years ago
docker pull unixfox/http_proxy