Installation

When you sign up you will be provided with a unique username and password and a connection string that you can use when configuring your proxy service in your application:  

http://username:[email protected]:9293

  

All requests that you make via this proxy will appear to the destination server to originate from one of the two static IPs you will be assigned when you sign up.

 

We recommend you store the connection string in an environment variable STATICA_URL. If you have signed up via the add-ons platform on Heroku or cloudControl this variable will be automatically set in your production environment.

 

Integration

You can use the standard Java libraries with Statica to access HTTP and HTTPS APIs via your static IP. The below examples uses a custom class to encapsulate the Statica proxy logic and an HttpURLConnection to make the HTTP request.

This sample uses the Java 8 Base64 class to encode the authorization String. If using a version less than Java 8 you should use another Base64 encoder implementation, such as the Apache Commons Codec.

 

 

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.zip.GZIPInputStream;
public class HTTPProxyDemo {
  public static void main(String[] args) {
    new HTTPProxyDemo();
  }
  
  public HTTPProxyDemo(){
    StaticaProxyAuthenticator proxy = new StaticaProxyAuthenticator();
    String testUrl = "http://ip.jsontest.com/";
    System.out.println(getResponse(proxy, testUrl));
  }
  
  public String getResponse(StaticaProxyAuthenticator proxy, String urlToRead) {
        String result = "";
        try {
         URL url = new URL(urlToRead);
           HttpURLConnection conn = (HttpURLConnection) url.openConnection();
           conn.setRequestProperty("Proxy-Authorization", "Basic " + proxy.getEncodedAuth());
           conn.setRequestProperty("Accept-Encoding", "gzip");
           Authenticator.setDefault(proxy.getAuth());
           conn.setRequestMethod("GET");
           InputStream is = conn.getInputStream();
           if(conn.getContentEncoding()!=null && conn.getContentEncoding().equalsIgnoreCase("gzip")){
             is = new GZIPInputStream(is);
           }
           byte[] buffer = new byte[1024];
           int len;
           ByteArrayOutputStream bos = new ByteArrayOutputStream();
           while (-1 != (len = is.read(buffer))) {
             bos.write(buffer, 0, len);
           }           
           result = new String(bos.toByteArray());
           is.close();
        } catch (IOException e) {
           e.printStackTrace();
        } catch (Exception e) {
           e.printStackTrace();
        }
        return result;
     }    
}

 

 

 

import java.net.Authenticator;
import java.net.MalformedURLException;
import java.net.PasswordAuthentication;
import java.net.URL;

public class StaticaProxyAuthenticator extends Authenticator{
  private String user, password, host;  
  private int port;
  private ProxyAuthenticator auth;

  public StaticaProxyAuthenticator() {
      String proxyUrlEnv = System.getenv("STATICA_URL");
    if(proxyUrlEnv!=null){
      try {
        URL proxyUrl = new URL(proxyUrlEnv);
        String authString = proxyUrl.getUserInfo();
        user = authString.split(":")[0];
        password = authString.split(":")[1];
        host = proxyUrl.getHost();
        port = proxyUrl.getPort();    
        auth = new ProxyAuthenticator(user,password);
        setProxy();
      } catch (MalformedURLException e) {
        e.printStackTrace();
      }     
    }
    else{
      System.err.println("You need to set the environment variable STATICA_URL!");
    }
    
    }
   
    private void setProxy(){
      System.setProperty("http.proxyHost", host);
        System.setProperty("http.proxyPort", String.valueOf(port));
        System.setProperty("https.proxyHost",host);
        System.setProperty("https.proxyPort", String.valueOf(port));
    }
    
    public String getEncodedAuth(){
      //If not using Java8 you will have to use another Base64 encoded, e.g. apache commons codec.
      String encoded = java.util.Base64.getEncoder().encodeToString((user + ":" + password).getBytes());      
      return encoded;
    }
    
    public ProxyAuthenticator getAuth(){
      return auth;
    }
    
    class ProxyAuthenticator extends Authenticator {

        private String user, password;

        public ProxyAuthenticator(String user, String password) {
            this.user = user;
            this.password = password;
        }

        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(user, password.toCharArray());
        }
    }
    
}