Developer SDK

Java examples

Install the SDK · View source on GitHub ↗

socket/ApacheExample.java

import io.ur.sdk.Sdk;
import java.net.*;
import java.io.*;
import org.apache.hc.client5.http.DnsResolver;
import org.apache.hc.client5.http.socket.*;
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.config.RegistryBuilder;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.protocol.HttpContext;
import org.apache.hc.core5.pool.*;
import org.apache.hc.core5.ssl.SSLContexts;
import org.apache.hc.core5.util.TimeValue;

/** Pinned Apache 5.5 example. The socket-factory registry API is deprecated. */
@SuppressWarnings("deprecation")
public final class ApacheExample {
    public static void get(Sdk.Device device, String url) throws Exception {
        UrSocketFactory factory = new UrSocketFactory(device);
        ConnectionSocketFactory plain = new ConnectionSocketFactory() {
            public Socket createSocket(HttpContext context) {return factory.createSocket();}
            public Socket connectSocket(TimeValue timeout, Socket socket, HttpHost host, InetSocketAddress remote, InetSocketAddress local, HttpContext context) throws IOException {
                if (local != null) throw new IOException("Local binding is unsupported");
                if (socket == null) socket = createSocket(context);
                socket.connect(InetSocketAddress.createUnresolved(host.getHostName(), remote.getPort()), timeout == null ? 30000 : (int)Math.min(Integer.MAX_VALUE, timeout.toMilliseconds()));
                return socket;
            }
        };
        SSLConnectionSocketFactory secure = new SSLConnectionSocketFactory(SSLContexts.createSystemDefault()) {
            @Override public Socket createSocket(HttpContext context) {return factory.createSocket();}
        };
        DnsResolver dns = new DnsResolver() {
            public InetAddress[] resolve(String host) throws UnknownHostException {return new InetAddress[]{InetAddress.getByAddress(host, new byte[4])};}
            public String resolveCanonicalHostname(String host) {return host;}
        };
        var registry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", plain).register("https", secure).build();
        try (var manager = new PoolingHttpClientConnectionManager(registry, PoolConcurrencyPolicy.STRICT, PoolReusePolicy.LIFO, TimeValue.ofMinutes(1), null, dns, null);
             var client = HttpClients.custom().setConnectionManager(manager).build()) {
            client.execute(new HttpGet(url), response -> {System.out.println(response.getCode()); System.out.println(EntityUtils.toString(response.getEntity())); return null;});
        }
    }
}