【问题标题】:Java HttpRequest get underlying socket?Java HttpRequest 获取底层套接字?
【发布时间】:2023-04-01 23:01:01
【问题描述】:

我想以某种方式获取用于 http 请求/响应的套接字。最终目标是创建一个

java.io.IOException: Connection reset by peer

我猜这可以通过在客户端代码中关闭套接字来完成。有办法吗?

编辑:

根据 cmets - 我有一个用于某些集成测试的客户端模拟器。有些测试用例需要服务器抛出异常,即

java.io.IOException: Connection reset by peer

截至目前。我理解 确切 套接字的创建和使用方式在很大程度上是特定于实现的,而使用 http 客户端背后的全部意义在于将其抽象出来。我宁愿不在 http 客户端或 request 上使用 Whitebox.getInternalState() 之类的东西来获取底层套接字,也宁愿不必实现一种通过套接字以文本形式发送请求的方法。

【问题讨论】:

  • 欢迎来到 StackOverflow!请阅读how to ask
  • 这看起来像是 XY 问题。请提供有关您要解决的用例或功能的更多信息,然后我们可以在此基础上工作。顺便说一句,检索内部套接字是特定于实现的,太多了,我想说,太多以至于它可以在应用服务器版本之间改变,所以不推荐这种方法。
  • 那么如果你明白你不想这样做,为什么你的标题和你的问题会问如何去做呢?

标签: java sockets servlets


【解决方案1】:

引发该错误的最简单方法与获取底层套接字无关,这在任何情况下都是不可能的。就是对非常大的资源执行GET请求,从不读取响应体:直接关闭输入流,断开HttpURLConnection.

【讨论】:

  • 实际上我已经尝试过这种方法,它会导致 ClientAbortException: java.net.SocketException: Connection reset。但是我想专门引起一个 IOException。
  • 没有。您的目标是进行连接重置。这在平台中的表现方式与实现的细节无关。您不是在测试平台对 TCP 条件到 Java 异常的映射:您是在测试 TCP 条件本身。或者你应该是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 2015-11-25
  • 1970-01-01
  • 2019-06-10
  • 2010-09-12
  • 1970-01-01
相关资源
最近更新 更多