【问题标题】:How to make a new connection for each POST request with Jersey Client如何使用 Jersey 客户端为每个 POST 请求建立新连接
【发布时间】:2012-08-23 13:40:59
【问题描述】:

我的程序应该向 https 站点发出多个 POST 请求,我需要它在每次发出新请求时进行 SSL 握手。 然而,它似乎只在第一次握手,然后使用现有连接来执行其他请求而无需新的握手。我敢肯定它以后不会握手,因为第一次做请求和收到响应大约需要 700 毫秒,但后来只需要大约 30 毫秒。

这是我初始化客户端的方式:(我在这里缺少一些属性吗?)

    SSLContext context = SSLContext.getInstance("SSL");
    context.init(kms, trustAllCerts, null);
    SSLContext.setDefault(context);

    ClientConfig config = new DefaultClientConfig();
    config.getProperties().put(ClientConfig.PROPERTY_READ_TIMEOUT, timeout * 1000);
    config.getProperties().put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS, false);
    config.getFeatures().put(ClientConfig.FEATURE_DISABLE_XML_SECURITY, true);
    client = Client.create(config);

这是我提出实际请求的方式:

    ClientResponse cr = service.type(MediaType.APPLICATION_XML).accept(MediaType.APPLICATION_XML).post(ClientResponse.class, batch);

(服务变量是 Builder 类,它创建 ClientRequest。它是指定 URL 的地方。)

有什么想法吗?

【问题讨论】:

  • “我需要它在每次发出新请求时进行 SSL 握手。”为什么?
  • 用于测试它发出请求的服务器如何处理它。

标签: java ssl https jersey


【解决方案1】:

HTTP 具有持久连接,而 SSL 具有可恢复会话,这两者都专门用于阻止您尝试完成的操作。

如果您深入研究服务器的内部结构,您可能会出于测试目的以某种方式将它们都关闭,但我真的看不出测试一个您会在生产中部署的配置有什么意义。

【讨论】:

  • 感谢您的澄清。看来我可能不得不使用 Jersey 以外的其他东西,因为我无法在 Jersey 框架中找到要关闭的正确设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-11
  • 1970-01-01
  • 2021-06-23
  • 2019-10-19
  • 2014-04-16
  • 1970-01-01
  • 2017-05-17
相关资源
最近更新 更多