docs: public static HttpURLConnection createHttpURLConnection(URL pURL, Properties pProperties, boolean pFollowRedirects, int pTimeout)
              throws IOException {
  
          // Open the connection, and get the stream
          HttpURLConnection conn;
  
          if (pTimeout > 0) {
              // Supports timeout
              conn = new com.twelvemonkeys.net.HttpURLConnection(pURL, pTimeout);
          }
          else {
              // Faster, more compatible
              conn = (HttpURLConnection) pURL.openConnection();
          }
  
          // Set user agent
          if ((pProperties == null) || !pProperties.containsKey("User-Agent")) {
              conn.setRequestProperty("User-Agent",
                      VERSION_ID
                      + " (" + System.getProperty("os.name") + "/" + System.getProperty("os.version") + "; "
                      + System.getProperty("os.arch") + "; "
                      + System.getProperty("java.vm.name") + "/" + System.getProperty("java.vm.version") + ")");
          }
  
          // Set request properties
          if (pProperties != null) {
              for (Map.Entry<Object, Object> entry : pProperties.entrySet()) {
                  // Properties key/values can be safely cast to strings
                  conn.setRequestProperty((String) entry.getKey(), entry.getValue().toString());
              }
          }
  
          try {
              // Breaks with JRE1.2?
              conn.setInstanceFollowRedirects(pFollowRedirects);
          }
          catch (LinkageError le) {
              // This is the best we can do...
              HttpURLConnection.setFollowRedirects(pFollowRedirects);
              System.err.println("You are using an old Java Spec, consider upgrading.");
              System.err.println("java.net.HttpURLConnection.setInstanceFollowRedirects(" + pFollowRedirects + ") failed.");
  
              //le.printStackTrace(System.err);
          }
  
          conn.setDoInput(true);
          conn.setDoOutput(true);
  
          //conn.setUseCaches(true);
          return conn;
      }