in core/src/main/java/org/apache/stormcrawler/proxy/MultiProxyManager.java [59:144]
public void configure(Config conf) {
// load proxy file from configuration
String proxyFile = ConfUtils.getString(conf, "http.proxy.file", null);
// load proxy rotation from config
String proxyRot = ConfUtils.getString(conf, "http.proxy.rotation", "ROUND_ROBIN");
// create variable to hold rotation scheme
ProxyRotation proxyRotationScheme;
// map rotation scheme to enum
switch (proxyRot) {
case "RANDOM":
proxyRotationScheme = ProxyRotation.RANDOM;
break;
case "LEAST_USED":
proxyRotationScheme = ProxyRotation.LEAST_USED;
break;
default:
if (!proxyRot.equals("ROUND_ROBIN"))
LOG.error(
"invalid proxy rotation scheme passed `{}` defaulting to ROUND_ROBIN; options: {}",
proxyRot,
ProxyRotation.values());
proxyRotationScheme = ProxyRotation.ROUND_ROBIN;
break;
}
// call default constructor
this.init(proxyRotationScheme);
// create variable to hold file scanner
Scanner scanner;
// check if file exists in resources
URL resourcesProxyFilePath = getClass().getClassLoader().getResource(proxyFile);
// conditionally load file from resources
if (resourcesProxyFilePath != null) {
try {
scanner = new Scanner(resourcesProxyFilePath.openStream(), StandardCharsets.UTF_8);
} catch (IOException e) {
throw new RuntimeException("failed to load proxy resource file: " + proxyFile, e);
}
} else {
// open file to load proxies
File proxyFileObj = new File(proxyFile);
// create new scanner to read file line-by-line
try {
scanner = new Scanner(proxyFileObj, StandardCharsets.UTF_8);
} catch (IOException e) {
throw new RuntimeException("failed to load proxy file: " + proxyFile, e);
}
}
// create array to hold the loaded proxies
SCProxy[] fileProxies = new SCProxy[0];
// iterate over lines in file loading them into proxy objects
while (scanner.hasNextLine()) {
// read line containing proxy connection string
String proxyConnectionString = scanner.nextLine();
// skip commented lines and empty lines
if (proxyConnectionString.startsWith("#")
|| proxyConnectionString.startsWith("//")
|| proxyConnectionString.isEmpty()
|| proxyConnectionString.trim().isEmpty()) continue;
// attempt to load proxy connection string and add proxy to proxies array
fileProxies =
(SCProxy[]) ArrayUtils.add(fileProxies, new SCProxy(proxyConnectionString));
}
// close scanner
scanner.close();
// ensure that at least 1 proxy was loaded
if (fileProxies.length < 1) {
throw new IllegalArgumentException(
"at least one proxy must be loaded to create a multi-proxy manager");
}
// assign proxies to class variable
this.proxies = fileProxies;
}