问题标签 [java-http-client]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
779 浏览

java - 包裹体订阅者在 GZIPInputStream 中导致挂起

我正在使用新java.net.http类来处理异步 HTTP 请求+响应交换,并且我正在尝试找到一种方法让 BodySubscriber 处理不同的编码类型,例如 gzip。

但是,映射 aBodySubsriber<InputStream>以便底层流被 a 包装GZIPInputStream(当在响应标头中找到“Content-Encoding: gzip”时)会导致挂起。没有例外,只是完全停止活动。

映射的代码BodySubscriber如下所示:

接收具有“gzip”编码的 HTTP 响应会导致控制台显示以下内容:

进入 EncodedBodyHandler.apply 方法。
进入 decodeGzipStream 方法。

什么都没有看到,所以调用GZIPInputStream构造函数之后的行永远不会执行。

有谁知道为什么这种将 a 包裹在InputStreamaBodySubscriber<InputStream>中的尝试GZIPInputStream挂起?

注意:未编码(原始文本)HTTP 响应主体的等效方法只包含一个BodySubscribers.ofInputStream()没有映射的调用,这允许接收和显示响应而不会出现问题。

0 投票
3 回答
5217 浏览

java - Java HTTP 客户端是否处理压缩

我试图在新的 Java HTTP 客户端中找到任何关于压缩处理的提及,但失败了。gzip是否有用于处理例如或deflate压缩的内置配置?

我希望有一个BodyHandler例如这样的东西:

但我没有看到。我也没有看到任何配置HttpClient。我是在找错地方了,还是故意没有实现并推迟到支持库?

0 投票
1 回答
1070 浏览

java - 使用 Java 创建 Hastebin 粘贴

我正在尝试制作一个 java 程序,我可以给她一个字符串,它将它粘贴到 Hastebin(www.hastebin.com) 并将粘贴的 URL 打印到控制台,这是我拥有的代码: Main.java(主类):

我的 Hastebin.java 类:

我的错误:

我真的很感激能得到帮助。

0 投票
2 回答
7646 浏览

java - 如何在 Java 11 http 客户端中保持连接活动

我正在使用HttpClient带有 HTTP/2 的 Java 11,并且需要保持连接活动几分钟,但构建器没有设置它的选项。有没有办法指定这一点并使客户端保持连接一段时间?

0 投票
1 回答
2515 浏览

java - Is it possible to intercept Java 11 HttpClient requests?

Basically as the title says. Apache HttpClient and Spring RestTemplate allow for defining custom interceptors which wrap around requests/responses and allow for additional (global) modification of request parameters, logging, etc...

I do not see such a feature available in standard Java implementation of java.net.http.HttpClient (as of Java 11). Am I missing something or is there no way to intercept all requests/responses on a single HttpClient?

0 投票
1 回答
1652 浏览

java - 不能在 java.net.http.HttpClient 上发出多个请求,否则将收到:javax.net.ssl.SSLHandshakeException

我正在测试HttpClientJava 11 的新功能,并遇到了以下行为:

我正在向公共 REST API 发出两个异步请求以进行测试,并使用一个客户端和两个单独的请求进行了尝试。这个过程没有抛出任何异常。

然后我尝试将其重构HttpClient为一个方法,当它尝试发出第二个请求时出现以下异常:

在成功执行第一个请求并在第二个请求失败后,这会产生以下异常:

我也尝试通过方法中的参数传递单独的客户端和请求,但它产生了相同的结果。这里发生了什么?

0 投票
1 回答
204 浏览

java - 如何响应式下载和处理大数据?

我需要通过 HTTP 开始下载一些内容,然后将数据作为反应流读取。

因此,即使下载的数据很大,我几乎可以立即读取响应正文的前几个字节(无需等待整个响应正文)。然后,进行一些计算,并在几秒钟内读取另一部分数据。缓存数据必须有一些限制,因为操作内存无法处理全部内容(数十 GB)。

我一直在尝试使用HttpClient'ssendAsync方法BodyHandlers.ofInputStream(),但它总是阻塞并等待所有数据到达。

我需要更改什么以便逐渐下载响应正文?

0 投票
1 回答
4155 浏览

java - Java HttpRequest 超时意外抛出 HttpConnectTimeoutException

java.net.http使用与 JDK 11 一起发布的新包,HttpRequest已将 an 组装成故意低响应超时:

目的是测试HttpTimeoutException结果是否被正确处理,但出乎意料的是,这个响应超时值导致了一个HttpConnectionTimeoutException,被这段代码捕获:

这意味着响应超时导致代码表现得好像发生了连接超时。据我了解,连接超时和响应超时应该是不同的概念,应该可以分别捕获和处理。

附加到的堆栈跟踪HttpConnectionTimeoutException如下所示:

我误解了超时概念吗?超时值是否HttpRequest只是提供了默认HttpClient超时值的替代方案?是否有可靠的方法将连接和响应超时捕获为不同的事件?

对于它的价值,Javadoc forHttpRequest.Builder.timeout(Duration)说明如下:

为此请求设置超时。如果在指定的超时时间内未收到响应,则从 HttpClient::send 抛出 HttpTimeoutException 或 HttpClient::sendAsync 异常完成并出现 HttpTimeoutException。不设置超时的效果和设置一个无限的Duration是一样的,即。永远封锁。

让事情变得混乱的是,从技术上讲,HttpConnectionTimeoutException它是一个子类,HttpTimeoutException该方法的合同timeout(Duration)正在被满足。但这似乎无济于事。

(在你问之前:是的,传递给的值HttpRequest.Builder.timeout(Duration)是是否抛出异常的决定因素。所以异常不是基于用于创建HttpClient实例的连接超时值。)

0 投票
1 回答
913 浏览

java - WildFly 服务模块加载器 - jdk.incubator.http.HttpClient 上的 ClassNotFound

我正在使用 WildFly15 和 JDK 10 来使用新的 HTTP 客户端构建一个应用程序,当我jdk.incubator.httpclient在我的模块中声明它是唯一且单一的要求时,它工作正常。(我不能去JDK11,因为我们需要以32位运行)。

这是两组值的完整命令行(我从 Eclipse 复制了它):

我正在正确添加添加--add-modules jdk.incubator.httpclient到 JVM 启动。

但是,当我删除javaee.api模块的注释并将其添加为要求时,我得到ClassNotFoundException

由于我在 EJB 中使用 HTTP 客户端 API,这可能是 javaee.api 中断构建的原因吗?如何解决?

使用选项 use 启动 java--show-module-resolution确认模块已加载:

0 投票
5 回答
9010 浏览

java - 关闭 Java HTTP 客户端

有没有办法关闭java.net.http.HttpClient立即释放它所持有的资源?

在内部,它包含一个选择器、一个连接池和一个Executor(使用默认值时)。但是它没有实现Closeable/ AutoCloseable