Java 如何在Restlet框架中设置ClientResource发送请求的超时
我使用Restlet框架,特别是类Java 如何在Restlet框架中设置ClientResource发送请求的超时,java,restlet,clientresource,Java,Restlet,Clientresource,我使用Restlet框架,特别是类ClientResource,通过自己的get()、post()、put()和delete()方法向服务器发送HTTP请求。由于有时服务器处于脱机状态,因此无法访问,因此我希望设置一个比默认值更小的超时。我怎么做 目前,我以这种方式尝试,但没有成功: ClientResource cr = new ClientResource(uri); Context context = new Context(); context.getParameters().add(
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>
org.restlet.jse
org.restlet
2.4.0
org.restlet.jse
org.restlet.ext.httpclient
2.4.0
要正确设置超时,请执行以下操作:
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>
org.restlet.jse
org.restlet
2.4.0
org.restlet.jse
org.restlet.ext.httpclient
2.4.0
是否尝试设置读取超时
?是的,但它不起作用。也许您可以尝试使用Mashape Unirest库来代替它?@xybrek我不能,因为这意味着必须更改项目中的许多内容。无论如何,这不是一个好答案。您是否尝试过设置readTimeout
?是的,但它不起作用。也许您可以尝试使用Mashape Unirest库来代替它?@xybrek我不能,因为这意味着必须更改我项目中的许多内容。无论如何,这不是一个好答案。