我使用 ReSTLet 框架,特别是类 ClientResource
通过它自己的 get()
、post()
、put()
和 delete()
方法向服务器发送 HTTP 请求。由于有时服务器处于离线状态,因此无法访问,因此我想设置比默认值更小的超时。我该怎么做?
目前我已经尝试过这种方式但没有成功:
ClientResource cr = new ClientResource(uri);
Context context = new Context();
context.getParameters().add("maxIoIdleTimeMs", "0");
context.getParameters().add("ioMaxIdleTimeMs", "0");
context.getParameters().add("socketTimeout", "1000");
cr.setNext(new Client(context, Protocol.HTTP));
cr.setRetryOnError(false);
...
Representation r = cr.get();
结果与默认情况相同,即在 get()
方法返回连接错误异常之前超时约 60-90 秒。我的目的是预见到它。
最佳答案
正确设置超时:
Component c = new Component();
Client client = c.getClients().add(Protocol.HTTP);
client.getContext().getParameters().add ( "socketTimeout", "10" );
Response resp = client.handle(new Request(Method.GET, "https://swapi.co/api/people/1/"));
System.out.println("Output: " + resp.getEntity().getText());
此代码将根据您的需要抛出超时异常,将socketTimeout
增加到至少1000以便能够检索测试API JSON响应。
此外,还使用了以下版本:
<dependency>
<groupId>org.restlet.jse</groupId>
<artifactId>org.restlet</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.restlet.jse</groupId>
<artifactId>org.restlet.ext.httpclient</artifactId>
<version>2.4.0</version>
</dependency>
关于java - 如何在ReSTLet Framework中设置ClientResource发送请求的超时时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58846937/