Я пытаюсь сканировать 300 000 URL. Однако где-то посередине код зависает при попытке получить код ответа из URL. Я не уверен, что происходит не так, как соединение устанавливается, но проблема возникает после этого. Любые предложения / указатели будут с благодарностью. Кроме того, есть ли способ проверить связь с веб-сайтом в течение определенного периода времени, и если он не отвечает, просто перейдите к следующему?
Я изменил код в соответствии с предложениями, установив время чтения и свойство запроса, как было предложено. Однако даже сейчас код не может получить код ответа!
Вот мой модифицированный фрагмент кода:
URL url=null;
try
{
Thread.sleep(8000);
}
catch (InterruptedException e1)
{
e1.printStackTrace();
}
try
{
//urlToBeCrawled comes from the database
url=new URL(urlToBeCrawled);
}
catch (MalformedURLException e)
{
e.printStackTrace();
//The code is in a loop,so the use of continue.I apologize for putting code in the catch block.
continue;
}
HttpURLConnection huc=null;
try
{
huc = (HttpURLConnection)url.openConnection();
}
catch (IOException e)
{
e.printStackTrace();
}
try
{
//Added the request property
huc.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
huc.setRequestMethod("HEAD");
}
catch (ProtocolException e)
{
e.printStackTrace();
}
huc.setConnectTimeout(1000);
try
{
huc.connect();
}
catch (IOException e)
{
e.printStackTrace();
continue;
}
int responseCode=0;
try
{
//Sets the read timeout
huc.setReadTimeout(15000);
//Code hangs here for some URL which is random in each run
responseCode = huc.getResponseCode();
}
catch (IOException e)
{
huc.disconnect();
e.printStackTrace();
continue;
}
if (responseCode!=200)
{
huc.disconnect();
continue;
}