我使用以下 Groovy 代码片段来获取 Grails 应用程序中 HTML 页面的纯文本表示形式:
String str = new URL("http://www.example.com/some/path")?.text?.decodeHTML()
现在我想更改代码,以便请求在 5 秒后超时(导致 str == null
)。实现这一目标的最简单且最 Groovy 的方法是什么?
最佳答案
我检查了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();
}
关于grails - 在 Groovy/Grails 中设置 new URL(...).text 的超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1839435/