Установка времени ожидания для нового URL (...). Текст в Groovy / Grails - PullRequest
7 голосов
/ 03 декабря 2009

Я использую следующий фрагмент Groovy для получения текстового представления HTML-страницы в приложении Grails:

String str = new URL("http://www.example.com/some/path")?.text?.decodeHTML()

Теперь я хочу изменить код, чтобы время ожидания запроса превышало 5 секунд (в результате str == null). Какой самый простой и самый Groovy способ добиться этого?

Ответы [ 2 ]

6 голосов
/ 03 декабря 2009

Вы должны будете сделать это по-старому, получить URLConnection, установить время ожидания для этого объекта, затем прочитать данные через Reader

Это было бы неплохо добавить в Groovy (imho), так как я мог бы в какой-то момент почувствовать, что мне это нужно;

Может быть, предложить это как запрос функции на JIRA?

Я добавил это как RFE на Groovy JIRA

http://jira.codehaus.org/browse/GROOVY-3921

Так что, надеюсь, мы увидим это в следующей версии Groovy ...

5 голосов
/ 26 декабря 2013

Я проверил исходный код groovy 2.1.8, ниже доступен код:

'http://www.google.com'.toURL().getText([connectTimeout: 2000, readTimeout: 3000])

Карта конфигурации логики для обработки находится в методе org.codehaus.groovy.runtime.ResourceGroovyMethods#configuredInputStream

private static InputStream configuredInputStream(Map parameters, URL url) throws IOException {
    final URLConnection connection = url.openConnection();
    if (parameters != null) {
        if (parameters.containsKey("connectTimeout")) {
            connection.setConnectTimeout(DefaultGroovyMethods.asType(parameters.get("connectTimeout"), Integer.class));
        }
        if (parameters.containsKey("readTimeout")) {
            connection.setReadTimeout(DefaultGroovyMethods.asType(parameters.get("readTimeout"), Integer.class));
        }
        if (parameters.containsKey("useCaches")) {
            connection.setUseCaches(DefaultGroovyMethods.asType(parameters.get("useCaches"), Boolean.class));
        }
        if (parameters.containsKey("allowUserInteraction")) {
            connection.setAllowUserInteraction(DefaultGroovyMethods.asType(parameters.get("allowUserInteraction"), Boolean.class));
        }
        if (parameters.containsKey("requestProperties")) {
            @SuppressWarnings("unchecked")
            Map<String, String> properties = (Map<String, String>) parameters.get("requestProperties");
            for (Map.Entry<String, String> entry : properties.entrySet()) {
                connection.setRequestProperty(entry.getKey(), entry.getValue());
            }
        }

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