java.net.HttpURLConnection#getHeaderFieldDate ( )源码实例Demo

下面列出了java.net.HttpURLConnection#getHeaderFieldDate ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: openwebbeans-meecrowave   文件: Downloads.java
private static Download fillDownloadable(final Download download) {
    try {
        final URL url = new URL(download.mavenCentralUrl);
        final HttpURLConnection connection = HttpURLConnection.class.cast(url.openConnection());
        connection.setConnectTimeout((int) TimeUnit.SECONDS.toMillis(30));
        final int responseCode = connection.getResponseCode();
        if (responseCode != HttpURLConnection.HTTP_OK) {
            if (HttpURLConnection.HTTP_NOT_FOUND != responseCode) {
                System.err.println("Got " + responseCode + " for " + download.url);
            }
            return null;
        }

        long lastMod = connection.getHeaderFieldDate("Last-Modified", 0);
        download.date = Instant.ofEpochMilli(lastMod);

        download.size = toSize(ofNullable(connection.getHeaderField("Content-Length"))
                .map(Long::parseLong).orElse(0L), ofNullable(connection.getHeaderField("Accept-Ranges")).orElse("bytes"));

        connection.getInputStream().close();
    } catch (final IOException e) {
        e.printStackTrace();
        return null;
    }
    return download;
}
 
/**
 * Attempt to validate the response and detect common causes of errors. The most common being time drift.
 * <p>
 * TODO: catch rate limitting errors. Should delay and retry.
 *
 * @param connection an open url connection
 * @return true if 200 OK response, false otherwise.
 * @throws NetStorageException wrapped exception if it is a recoverable exception
 * @throws IOException         shouldn't be called at this point, but could be triggered when interrogating the response
 */
public boolean validate(HttpURLConnection connection) throws NetStorageException, IOException {
    if (connection.getResponseCode() == HttpURLConnection.HTTP_OK)
        return true;

    // Validate Server-Time drift
    Date currentDate = new Date();
    long responseDate = connection.getHeaderFieldDate("Date", 0);
    if ((responseDate != 0 && currentDate.getTime() - responseDate > 30 * 1000)
        || (responseDate != 0 && (currentDate.getTime() - responseDate) * -1 > 30 * 1000))
        throw new NetStorageException("Local server Date is more than 30s out of sync with Remote server");

    // generic response
    throw new NetStorageException(String.format("Unexpected Response from Server: %d %s\n%s",
            connection.getResponseCode(), connection.getResponseMessage(), connection.getHeaderFields()), connection.getResponseCode());
}
 
/**
 * Gets the system time by issuing a request over the network.
 *
 * @return time (milliseconds since epoch).
 *
 * @throws IOException if an I/O error occurs.
 */
public long getNetworkTime() throws IOException {
  HttpURLConnection urlConnection = mUrlConnectionFactory.openHttpUrl(TIME_SOURCE_URL);
  urlConnection.setRequestMethod("HEAD");
  int responseCode = urlConnection.getResponseCode();
  if (responseCode != HttpURLConnection.HTTP_OK) {
    Log.d(LOG_TAG, String.format("URL %s returned %d", TIME_SOURCE_URL, responseCode));
    throw new IOException(String.format("HTTP status code %d", responseCode));
  }
  long date = urlConnection.getHeaderFieldDate(DATE_HEADER, 0);
  if (date == 0) {
    String dateHeader = urlConnection.getHeaderField(DATE_HEADER);
    throw new IOException("Got missing or invalid date from header value " + dateHeader);
  }
  Log.d(LOG_TAG, String.format("Got date value %d", date));
  return date;
}
 
源代码4 项目: NationStatesPlusPlus   文件: DailyDumps.java
/**
 * Checks to see if an update to the region daily dump, and if so, downloads the update.
 */
private void updateRegionsDump() {
	InputStream stream = null;
	try {
		HttpURLConnection conn = (HttpURLConnection)(new URL(REGIONS_URL)).openConnection();
		conn.setRequestProperty("User-Agent", userAgent);
		conn.connect();
		final long contentLength = conn.getContentLengthLong();
		final long time = conn.getHeaderFieldDate("Last-Modified", -1);
		final DateTime serverModified = new DateTime(time, DateTimeZone.forOffsetHours(0)); //set to UTC time
		Logger.info("Checking region dump for {}, length: {}, lastModified: {}", serverModified, contentLength, serverModified);
		
		File regionsDump = new File(regionsDir, serverModified.toString(FILE_DATE) + "-regions.xml.gz");
		latestRegionDump.set(regionsDump);
		
		stream = conn.getInputStream();
		if (!regionsDump.exists() || regionsDump.length() != contentLength) {
			Logger.info("Saving regions dump to " + regionsDump.getAbsolutePath());
			try (FileOutputStream fos = new FileOutputStream(regionsDump)) {
				IOUtils.copy(stream, fos);
				Logger.info("Saved regions dump, size: {}", regionsDump.length());
			}
		} else {
			Logger.debug("Regions dump is up to date");
		}
	} catch (IOException e) {
		Logger.error("Unable to process regions dump", e);
	} finally {
		IOUtils.closeQuietly(stream);
	}
}
 
源代码5 项目: NationStatesPlusPlus   文件: DailyDumps.java
/**
 * Checks to see if an update to the nation daily dump, and if so, downloads the update.
 * 
 * Will create a DumpUpdateTask thread after the update is downloaded.
 */
private void updateNationsDump() {
	InputStream stream = null;
	try {
		HttpURLConnection conn = (HttpURLConnection)(new URL(NATIONS_URL)).openConnection();
		conn.setRequestProperty("User-Agent", userAgent);
		conn.connect();
		final long contentLength = conn.getContentLengthLong();
		final long time = conn.getHeaderFieldDate("Last-Modified", -1);
		final DateTime serverModified = new DateTime(time, DateTimeZone.forOffsetHours(0)); //set to UTC
		
		Logger.info("Checking nations dump, length: {}, lastModified: {}", contentLength, serverModified);
		File nationsDump = new File(nationsDir, serverModified.toString(FILE_DATE) + "-nations.xml.gz");
		latestNationDump.set(nationsDump);
		
		stream = conn.getInputStream();
		if (!nationsDump.exists() || nationsDump.length() != contentLength) {
			Logger.info("Saving nations dump to " + nationsDump.getAbsolutePath());
			try (FileOutputStream fos = new FileOutputStream(nationsDump)) {
				IOUtils.copy(stream, fos);
				Logger.info("Saved nations dump successfully, size: {}", nationsDump.length());
			}
			(new Thread(new DumpUpdateTask(access, getMostRecentRegionDump(), nationsDump), "Daily Dump Update Thread")).start();
		} else {
			Logger.debug("Nations dump is up to date");
		}
	} catch (IOException e) {
		Logger.error("Unable to process nations dump", e);
	} finally {
		IOUtils.closeQuietly(stream);
	}
}
 
源代码6 项目: pf4j-update   文件: SimpleFileDownloader.java
/**
 * Downloads file from HTTP or FTP.
 *
 * @param fileUrl source file
 * @return path of downloaded file
 * @throws IOException if IO problems
 * @throws PluginRuntimeException if validation fails or any other problems
 */
protected Path downloadFileHttp(URL fileUrl) throws IOException {
    Path destination = Files.createTempDirectory("pf4j-update-downloader");
    destination.toFile().deleteOnExit();

    String path = fileUrl.getPath();
    String fileName = path.substring(path.lastIndexOf('/') + 1);
    Path file = destination.resolve(fileName);

    // set up the URL connection
    URLConnection connection = fileUrl.openConnection();

    // connect to the remote site (may takes some time)
    connection.connect();

    // check for http authorization
    HttpURLConnection httpConnection = (HttpURLConnection) connection;
    if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED) {
        throw new ConnectException("HTTP Authorization failure");
    }

    // try to get the server-specified last-modified date of this artifact
    long lastModified = httpConnection.getHeaderFieldDate("Last-Modified", System.currentTimeMillis());

    // try to get the input stream (three times)
    InputStream is = null;
    for (int i = 0; i < 3; i++) {
        try {
            is = connection.getInputStream();
            break;
        } catch (IOException e) {
            log.error(e.getMessage(), e);
        }
    }
    if (is == null) {
        throw new ConnectException("Can't get '" + fileUrl + " to '" + file + "'");
    }

    // reade from remote resource and write to the local file
    FileOutputStream fos = new FileOutputStream(file.toFile());
    byte[] buffer = new byte[1024];
    int length;
    while ((length = is.read(buffer)) >= 0) {
        fos.write(buffer, 0, length);
    }
    fos.close();
    is.close();

    log.debug("Set last modified of '{}' to '{}'", file, lastModified);
    Files.setLastModifiedTime(file, FileTime.fromMillis(lastModified));

    return file;
}