httpURLConnection с пользовательским агентом получает 403 Forbidden, но не веб-браузер

Я запускаю программу, которая отправляет запросы в общедоступный API-интерфейс facebook. Его многопоточность и установлен пользовательский агент ("Mozilla/5.0...").

После 1000-10000 запросов он начинает получать исключение:

«java.io.IOException: сервер вернул код ответа HTTP: 403 для URL = https://graph.facebook.com/etc..."

для всех потоков, пытающихся получить ответ.
Если я остановлю процесс и перезапущу его, скажем, через 10 минут, он будет работать, но он получит исключения после меньшего количества запросов. Пока программа работает и получает эти исключения, я проверил запрос через веб-браузер Chrome, и он получил ответы просто отлично.

Я пытался переключать строки пользовательского агента во время выполнения, но это не сработало. Установка глобального времени задержки для всех потоков, когда один поток сталкивается с исключением, иногда работает, тайм-аут не является согласованным.

Поскольку IP-адрес не заблокирован, мне трудно понять, как API идентифицирует мой запрос, и знаю, что я не использую настоящий браузер, даже если определено свойство пользовательского агента.


person Maxim Zinger    schedule 22.12.2014    source источник
comment
В какой период вы делаете 1000-10000 запросов? Если это, скажем, 10 минут, то я предполагаю, что приложение, стоящее за API, решает, что эти запросы исходят не от обычного пользователя, и затем получает ответ статуса 403. Используете ли вы файлы cookie с запросами?   -  person Developer Marius Žilėnas    schedule 05.02.2015
comment
Я этого не делал, но кажется, что настройка: java.net.CookieHandler.CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL)); решает проблему.   -  person Maxim Zinger    schedule 09.04.2015