您好我正在编写一个程序,该程序遍历许多不同的URL,只检查它们是否存在。我基本上检查返回的错误代码是否为404。但是,当我检查超过1000个URL时,我希望能够非常快速地完成此操作。以下是我的代码,我想知道如何将其修改为快速工作(如果可能):
final URL url = new URL("http://www.example.com");
HttpURLConnection huc = (HttpURLConnection) url.openConnection();
int responseCode = huc.getResponseCode();
if (responseCode != 404) {
System.out.println("GOOD");
} else {
System.out.println("BAD");
}
使用JSoup会更快吗?
我知道有些网站提供代码200并有自己的错误页面,但我知道我正在检查的链接不这样做,所以这不是必需的。
答案 0 :(得分:29)
尝试发送“HEAD”请求而不是获取请求。这应该更快,因为没有下载响应正文。
huc.setRequestMethod("HEAD");
再次检查响应状态是否为400,而不是检查它是否为200.检查是否为正而不是负。 404,403,402 ..所有40x状态几乎相当于无效的无效网址。
您可以使用多线程来加快速度。
答案 1 :(得分:1)
尝试询问下一个DNS服务器
class DNSLookup
{
public static void main(String args[])
{
String host = "stackoverflow.com";
try
{
InetAddress inetAddress = InetAddress.getByName(host);
// show the Internet Address as name/address
System.out.println(inetAddress.getHostName() + " " + inetAddress.getHostAddress());
}
catch (UnknownHostException exception)
{
System.err.println("ERROR: Cannot access '" + host + "'");
}
catch (NamingException exception)
{
System.err.println("ERROR: No DNS record for '" + host + "'");
exception.printStackTrace();
}
}
}
答案 2 :(得分:0)
似乎你可以设置超时属性,确保它是可以接受的。如果你有很多网址要测试,并行进行测试,它会快得多。希望这会有所帮助。