问题描述
我编写了获取站点状态代码的代码,但是当我连接到VPN时,一个站点返回了远程主机终止了握手,而没有VPN没有错误,它返回了200作为其他站点。你有什么主意吗?代码在下方共享
public class Main {
public static void checkSites() {
try {
File links = new File("./linkler.txt");
Scanner scan = new Scanner(links);
ArrayList<String> list = new ArrayList<>();
while (scan.hasNext()) {
list.add(scan.nextLine());
}
File linkStatus = new File("LinkStatus.txt");
if (!linkStatus.exists()) {
linkStatus.createNewFile();
} else {
System.out.println("File already exists");
}
BufferedWriter writer = new BufferedWriter(new FileWriter(linkStatus));
for (String link : list) {
try {
if (!link.startsWith("http")) {
link = "http://" + link;
}
URL url = new URL(link);
HttpURLConnection.setFollowRedirects(true);
HttpURLConnection http = (HttpURLConnection) url.openConnection();
http.setRequestMethod("HEAD");
http.setConnectTimeout(10000);
http.setReadTimeout(10000);
int statusCode = http.getResponseCode();
if (statusCode == 403) { // If HTTP status code returns 403,this block of code will check the site 3 times. It makes sleep to thread 10 seconds,15 seconds and 100 seconds stepwise.
Thread.sleep(10000);
int tryAgainLater = 1;
while (tryAgainLater <= 3) {
try {
if (!link.startsWith("http")) {
link = "http://" + link;
}
url = new URL(link);
HttpURLConnection.setFollowRedirects(true);
http = (HttpURLConnection) url.openConnection();
http.setRequestMethod("HEAD");
http.setConnectTimeout(5000);
http.setReadTimeout(8000);
http.disconnect();
System.out.println(link + " " + statusCode);
writer.write(link + " " + statusCode);
writer.newLine();
} catch (Exception e) {
writer.write(link + " " + e.getMessage());
writer.newLine();
System.out.println(link + " " + e.getMessage());
}
if (tryAgainLater == 1) {
System.out.println("Second time program tries to get response code");
Thread.sleep(15000);
}
if (tryAgainLater == 2) {
System.out.println("Third time program tries to get response code");
Thread.sleep(100000);
}
if (tryAgainLater == 3) {
System.out.println("403 HTTP code hasn't broken.");
}
++tryAgainLater;
}
}
http.disconnect(); // It helps to increasing speed of code.
System.out.println(link + " " + statusCode);
writer.write(link + " " + statusCode);
writer.newLine();
} catch (Exception e) {
writer.write(link + " " + e.getMessage());
writer.newLine();
System.out.println(link + " " + e.getMessage());
}
}
try {
writer.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] args){
Timer myTimer = new Timer();
TimerTask sendingRequest = new TimerTask() {
int loopTeller = 1;
public void run() {
checkSites();
System.out.println("Loop has ended " + loopTeller + " time(s).");
loopTeller++;
}
};
myTimer.schedule(sendingRequest,20000);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)