How to Build a Super Simple HTTP Proxy in Elixir in just 20 lines of code

Oct 1, 2023 ยท 3 min read

Elixir makes it easy to build fast and scalable network applications. Here is a basic HTTP proxy server in less than 20 lines of Elixir code.

First we import the Plug library for handling HTTP connections:

import Plug.Conn

Next we define a function to handle each client request:

def handle_request(conn) do
  # proxy logic
end

The Plug.Conn module represents the client connection. Inside the function we:

  • Extract the requested URL from the connection:
  • url = parse_url(conn)
    
  • Make a proxied HTTP request to the URL:
  • resp = HTTPoison.get!(url)
    
  • Send the response back to client:
  • conn |> send_resp(200, resp.body)
    

    Finally we start a Plug endpoint for the proxy:

    Plug.Adapters.Cowboy.http MyProxy, []
    

    Passing it the proxy handler function.

    Here is the full simple proxy in Elixir:

    import Plug.Conn
    
    def handle_request(conn) do
      url = parse_url(conn)
      resp = HTTPoison.get!(url)
      conn |> send_resp(200, resp.body)
    end
    
    Plug.Adapters.Cowboy.http MyProxy, []
    

    This shows how to build a basic HTTP proxy in Elixir in less than 20 lines of code using the Plug and HTTPoison libraries.

    This is great as a learning exercise but it is easy to see that even the proxy server itself is prone to get blocked as it uses a single IP. In this scenario where you may want a proxy that handles thousands of fetches every day using a professional rotating proxy service to rotate IPs is almost a must.

    Otherwise, you tend to get IP blocked a lot by automatic location, usage, and bot detection algorithms.

    Our rotating proxy server Proxies API provides a simple API that can solve all IP Blocking problems instantly.

  • With millions of high speed rotating proxies located all over the world,
  • With our automatic IP rotation
  • With our automatic User-Agent-String rotation (which simulates requests from different, valid web browsers and web browser versions)
  • With our automatic CAPTCHA solving technology,
  • Hundreds of our customers have successfully solved the headache of IP blocks with a simple API.

    The whole thing can be accessed by a simple API like below in any programming language.

    In fact, you don't even have to take the pain of loading Puppeteer as we render Javascript behind the scenes and you can just get the data and parse it any language like Node, Puppeteer or PHP or using any framework like Scrapy or Nutch. In all these cases you can just call the URL with render support like so:

    curl "<http://api.proxiesapi.com/?key=API_KEY&render=true&url=https://example.com>"
    
    

    We have a running offer of 1000 API calls completely free. Register and get your free API Key.

    Browse by tags:

    Browse by language:

    Tired of getting blocked while scraping the web?

    ProxiesAPI handles headless browsers and rotates proxies for you.
    Get access to 1,000 free API credits, no credit card required!