package me.pbox.http;
import me.pbox.env.Environment;
import me.pbox.invoke.InvokeException;
import me.pbox.invoke.InvokeUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import java.io.File;
/**
* @author Mike Mirzayanov (mirzayanovmr@gmail.com)
*/
public class HttpUtil {
private static final Logger logger = Logger.getLogger(HttpUtil.class);
public static boolean get(String url, File targetFile) {
try {
logger.info("Downloading `" + url + "`...");
long beforeTimeMillis = System.currentTimeMillis();
boolean result = InvokeUtil.run(Environment.getBin("wget"), "--tries=3", "--retry-connrefused", "--output-document=" + targetFile, url) == 0;
long durationTimeMillis = System.currentTimeMillis() - beforeTimeMillis;
if (result) {
long size = targetFile.length();
logger.info("Successfully downloaded `" + url + "` to the `" + targetFile + "` [" + size + " bytes in " + durationTimeMillis + " ms].");
} else {
logger.warn("Failed to download `" + url + "` to the `" + targetFile + "` [in " + durationTimeMillis + " ms].");
}
return result;
} catch (InvokeException e) {
logger.warn("Can't download `" + url + "`.", e);
return false;
}
}
public static File getTemporaryFile(String url) {
int lastQuestionMarkIndex = url.lastIndexOf('?');
int lastSlashIndex = url.lastIndexOf('/');
if (lastSlashIndex < 0) {
throw new IllegalArgumentException("Expected slash in URL `" + url + "`.");
}
String output = "";
if (lastQuestionMarkIndex >= 0) {
output = url.substring(lastSlashIndex + 1, lastQuestionMarkIndex);
} else {
output = url.substring(lastSlashIndex + 1);
}
output = output.trim();
if (StringUtils.isBlank(output)) {
throw new IllegalArgumentException("Can't construct output document filename from URL `" + url + "`.");
}
File targetFile = new File(Environment.getPboxTempAsFile(), output);
if (!get(url, targetFile)) {
return null;
} else {
return targetFile;
}
}
public static void main(String[] args) {
System.out.println(HttpUtil.getTemporaryFile("http://codeforces.ru/profile/MikeMirzayanov?id=3"));
}
}