有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Restlet框架中设置ClientResource发送请求的超时

我使用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秒。我的目的是预测它


共 (1) 个答案

  1. # 1 楼答案

    要正确设置超时,请执行以下操作:

    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>