Кошук Github Api 403 запрещено через определенное время - PullRequest
3 голосов
/ 01 апреля 2019

У меня есть около 20 github, для которых я обновляю некоторую информацию с помощью gitHub API koshuke:

try {
    settings = settingsRepository.findById(1).orElseThrow(() -> new RuntimeException("No settings found"));
    GitHub gitHub = GitHub.connect(settings.getUsername(), settings.getToken());

    GHRepository repo;
    try {
        repo = gitHub.getRepository(gitHubModel.getUser() + "/" + gitHubModel.getRepo());
    } catch (Exception e) {
        e.printStackTrace();
        throw new GitHubRepositoryException("Couldn't connect to " + gitHubModel.getLink() + ". Check URL.");
}

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

repo = gitHub.getRepository(gitHubModel.getUser() + "/" + gitHubModel.getRepo());. 

Я попытался отладить и обнаружил, что он останавливается в определенный момент и выдает 403 Запрещено:

private <T> T parse(Class<T> type, T instance, int timeouts) throws IOException {
    InputStreamReader r = null;
    int responseCode = -1;
    String responseMessage = null;
    try {
        responseCode = uc.getResponseCode();
        responseMessage = uc.getResponseMessage();
        if (responseCode == 304) {
            return null;    // special case handling for 304 unmodified, as the content will be ""
        }
        if (responseCode == 204 && type!=null && type.isArray()) {
            // no content
            return type.cast(Array.newInstance(type.getComponentType(),0));
        }

        r = new InputStreamReader(wrapStream(uc.getInputStream()), "UTF-8");
        String data = IOUtils.toString(r);
        if (type!=null)
            try {
                return setResponseHeaders(MAPPER.readValue(data, type));
            } catch (JsonMappingException e) {
                throw (IOException)new IOException("Failed to deserialize " +data).initCause(e);
            }
        if (instance!=null) {
            return setResponseHeaders(MAPPER.readerForUpdating(instance).<T>readValue(data));
        }
        return null;
    } catch (FileNotFoundException e) {
        // java.net.URLConnection handles 404 exception has FileNotFoundException, don't wrap exception in HttpException
        // to preserve backward compatibility
        throw e;
    } catch (IOException e) {
        if (e instanceof SocketTimeoutException && timeouts > 0) {
            LOGGER.log(INFO, "timed out accessing " + uc.getURL() + "; will try " + timeouts + " more time(s)", e);
            return parse(type, instance, timeouts - 1);
        }
        throw new HttpException(responseCode, responseMessage, uc.getURL(), e);
    } finally {
        IOUtils.closeQuietly(r);
    }
}

Тогда исключениепотребляется, и он приходит к точке, где он вызывает Thread.sleep и останавливается там.Это потому, что я превысил лимит запросов?Где-то я читал, что это 5000 запросов в минуту, и я не делаю так много.Есть идеи, почему это происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...