问题标签 [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.
java - 包裹体订阅者在 GZIPInputStream 中导致挂起
我正在使用新java.net.http
类来处理异步 HTTP 请求+响应交换,并且我正在尝试找到一种方法让 BodySubscriber 处理不同的编码类型,例如 gzip。
但是,映射 aBodySubsriber<InputStream>
以便底层流被 a 包装GZIPInputStream
(当在响应标头中找到“Content-Encoding: gzip”时)会导致挂起。没有例外,只是完全停止活动。
映射的代码BodySubscriber
如下所示:
接收具有“gzip”编码的 HTTP 响应会导致控制台显示以下内容:
进入 EncodedBodyHandler.apply 方法。
进入 decodeGzipStream 方法。
什么都没有看到,所以调用GZIPInputStream
构造函数之后的行永远不会执行。
有谁知道为什么这种将 a 包裹在InputStream
aBodySubscriber<InputStream>
中的尝试GZIPInputStream
挂起?
注意:未编码(原始文本)HTTP 响应主体的等效方法只包含一个BodySubscribers.ofInputStream()
没有映射的调用,这允许接收和显示响应而不会出现问题。
java - Java HTTP 客户端是否处理压缩
我试图在新的 Java HTTP 客户端中找到任何关于压缩处理的提及,但失败了。gzip
是否有用于处理例如或deflate
压缩的内置配置?
我希望有一个BodyHandler
例如这样的东西:
但我没有看到。我也没有看到任何配置HttpClient
。我是在找错地方了,还是故意没有实现并推迟到支持库?
java - 使用 Java 创建 Hastebin 粘贴
我正在尝试制作一个 java 程序,我可以给她一个字符串,它将它粘贴到 Hastebin(www.hastebin.com) 并将粘贴的 URL 打印到控制台,这是我拥有的代码: Main.java(主类):
我的 Hastebin.java 类:
我的错误:
我真的很感激能得到帮助。
java - 如何在 Java 11 http 客户端中保持连接活动
我正在使用HttpClient
带有 HTTP/2 的 Java 11,并且需要保持连接活动几分钟,但构建器没有设置它的选项。有没有办法指定这一点并使客户端保持连接一段时间?
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
?
java - 不能在 java.net.http.HttpClient 上发出多个请求,否则将收到:javax.net.ssl.SSLHandshakeException
我正在测试HttpClient
Java 11 的新功能,并遇到了以下行为:
我正在向公共 REST API 发出两个异步请求以进行测试,并使用一个客户端和两个单独的请求进行了尝试。这个过程没有抛出任何异常。
然后我尝试将其重构HttpClient
为一个方法,当它尝试发出第二个请求时出现以下异常:
在成功执行第一个请求并在第二个请求失败后,这会产生以下异常:
我也尝试通过方法中的参数传递单独的客户端和请求,但它产生了相同的结果。这里发生了什么?
java - 如何响应式下载和处理大数据?
我需要通过 HTTP 开始下载一些内容,然后将数据作为反应流读取。
因此,即使下载的数据很大,我几乎可以立即读取响应正文的前几个字节(无需等待整个响应正文)。然后,进行一些计算,并在几秒钟内读取另一部分数据。缓存数据必须有一些限制,因为操作内存无法处理全部内容(数十 GB)。
我一直在尝试使用HttpClient
'ssendAsync
方法BodyHandlers.ofInputStream()
,但它总是阻塞并等待所有数据到达。
我需要更改什么以便逐渐下载响应正文?
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
实例的连接超时值。)
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
确认模块已加载:
java - 关闭 Java HTTP 客户端
有没有办法关闭java.net.http.HttpClient
立即释放它所持有的资源?
在内部,它包含一个选择器、一个连接池和一个Executor
(使用默认值时)。但是它没有实现Closeable
/ AutoCloseable
。