import org.elasticsearchmon.Strings; //导入方法依赖的package包/类

private URLConnection openConnection(URL aSource) throws IOException {

// set up the URL connection

URLConnection connection = aSource.openConnection();

// modify the headers

// NB: things like user authentication could go in here too.

if (hasTimestamp) {

connection.setIfModifiedSince(timestamp);

}

// in case the plugin manager is its own project, this can become an authenticator

boolean isSecureProcotol = "https".equalsIgnoreCase(aSource.getProtocol());

boolean isAuthInfoSet = !Strings.isNullOrEmpty(aSource.getUserInfo());

if (isAuthInfoSet) {

if (!isSecureProcotol) {

throw new IOException("Basic auth is only supported for HTTPS!");

}

String basicAuth = Base64.encodeBytes(aSource.getUserInfo().getBytes(StandardCharsets.UTF_8));

connection.setRequestProperty("Authorization", "Basic " + basicAuth);

}

if (connection instanceof HttpURLConnection) {

((HttpURLConnection) connection).setInstanceFollowRedirects(false);

connection.setUseCaches(true);

connection.setConnectTimeout(5000);

}

connection.setRequestProperty("ES-Version", Version.CURRENT.toString());

connection.setRequestProperty("ES-Build-Hash", Build.CURRENT.hashShort());

connection.setRequestProperty("User-Agent", "elasticsearch-plugin-manager");

// connect to the remote site (may take some time)

connection.connect();

// First check on a 301 / 302 (moved) response (HTTP only)

if (connection instanceof HttpURLConnection) {

HttpURLConnection httpConnection = (HttpURLConnection) connection;

int responseCode = httpConnection.getResponseCode();

if (responseCode == HttpURLConnection.HTTP_MOVED_PERM ||

responseCode == HttpURLConnection.HTTP_MOVED_TEMP ||

responseCode == HttpURLConnection.HTTP_SEE_OTHER) {

String newLocation = httpConnection.getHeaderField("Location");

URL newURL = new URL(newLocation);

if (!redirectionAllowed(aSource, newURL)) {

return null;

}

return openConnection(newURL);

}

// next test for a 304 result (HTTP only)

long lastModified = httpConnection.getLastModified();

if (responseCode == HttpURLConnection.HTTP_NOT_MODIFIED

|| (lastModified != 0 && hasTimestamp && timestamp >= lastModified)) {

// not modified so no file download. just return

// instead and trace out something so the user

// doesn't think that the download happened when it

// didn't

return null;

}

// test for 401 result (HTTP only)

if (responseCode == HttpURLConnection.HTTP_UNAUTHORIZED) {

String message = "HTTP Authorization failure";

throw new IOException(message);

}

}

//REVISIT: at this point even non HTTP connections may

//support the if-modified-since behaviour -we just check

//the date of the content and skip the write if it is not

//newer. Some protocols (FTP) don't include dates, of

//course.

return connection;

}

更多推荐

java isnullorempty_Java Strings.isNullOrEmpty方法代码示例