Все работает хорошо, однако время от времени я получаю SocketTimeOutException
. Я думаю, это потому, что веб-сайт отключает мою программу (или отключает меня по времени, или дросселирует, или что-то в этом роде).
Сбой соединения в HTTP ожидается. Такова природа протокола. Для этого может быть много причин (ваш newtork нестабилен, их сеть нестабильна, их брандмауэр думает, что вы их атакуете, и блокирует, ВАШ брандмауэр думает, что вы подвергаетесь атаке, и блокирует).
Я реализовал случайный сон между 0-30 секундами каждый раз, когда загружается новая страница. и я думаю, что это помогает, но это все еще происходит. Итак, теперь я пытаюсь поймать исключение и поспать 15 минут, прежде чем рекурсивно повторить попытку.
Я буду спать каждый раз, когда я успешно получаю страницу ИЛИ каждый раз, когда возникает ошибка, а затем повторяю попытку. Я бы не стал ждать так много (15 минут?), Я бы сделал максимум 1 минуту для обоих.
Есть ли лучший способ справиться с этим? Это причина, по которой я получаю исключение?
Как сказано, вы получаете исключение из-за сети. С этим ничего не поделаешь, это нормальное поведение сети.
Кроме того, поможет ли это как-то менять IP каждые несколько минут (и возможно ли это в Java)?
Поможет, если целевой веб-сайт ведет какой-либо журнал и блокирует IP-адрес после n
запросов. Тем не менее, вы не можете изменить его так, как хотите, с помощью Java. IP-адрес принадлежит машине (а не программе) и в большинстве случаев назначается кем-то другим, а не вами.
Вы можете делать HTTP-запросы через прокси, и тогда их IP-адреса будут достигать целевого сервера (и вы будете менять прокси, когда один из них будет забанен), но это сделает ваше соединение еще более нестабильным, так как вы добавляете еще один слой на "транзакцию".
person
acdcjunior
schedule
25.05.2013