问题标签 [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 - Java 11:新的 HTTP 客户端使用 x-www-form-urlencoded 参数发送 POST 请求
我正在尝试使用新的 http 客户端 api 发送 POST 请求。是否有内置的方式来发送格式为的参数x-www-form-urlencoded
?
我当前的代码:
我正在寻找一种更好的方法来传递参数。像这样的东西:
我需要自己构建这个功能还是已经内置了?
我正在使用 Java 12。
java - 检索 Java 11 HTTP 客户端 Cookie
这是一些有效的 bash 代码:
这是我对在 JVM 11 上运行的 Scala 2.13 的类似代码的尝试(非 Scala 程序员应该通过稍微眯眼就能轻松阅读此代码)。
maybeLoginCookie
从其他地方调用。
即使我看到身份验证有效,我也没有得到 cookie。问题可能与我如何初始化 HTTP 客户端的 cookie 处理有关吗?
java - 模拟 HttpClient 的 execte() 方法
我想模拟返回虚拟响应的execute
方法HttpClass
,但我的测试代码正在执行请求。
班级代码 -
测试类代码 -
我尝试了 Mockito 而不是 PowerMockito,但仍然请求实际执行。
java - 使用 java 11 HttpClient 将响应主体流式传输到流式请求主体
我正在尝试将来自 HTTP (GET) 响应的数据流式传输到另一个 HTTP (POST) 请求。使用旧的 HttpURLConnection,我将获取响应 OutputStream,将部分读入缓冲区并将它们写入请求 InputStream。
我已经设法在 Java 11 中对 HttpClient 做同样的事情,方法是创建我自己的 Publisher,在 POST 中使用它来编写请求正文。GET 请求有一个BodyHandler
withofByteArrayConsumer
将块发送到自定义发布者,然后它自己将块发送到订阅 HTTP POST 请求。
但我认为这不是正确的方法,因为看起来 API 中有一些东西看起来可以直接完成,而无需自己实现发布者和订阅者。
有HttpResponse.BodyHandlers.ofPublisher()
一个返回一个Publisher<List<ByteBuffer>
我可以用于 HTTP GET 请求的。不幸的是,对于我的 POST 请求,HttpRequest.BodyPublishers.fromPublisher
它需要一个Publisher<? extends ByteBuffer>
,所以似乎 fromPublisher 仅适用于拥有完整 ByteBuffer 的发布者,而不适用于为部分数据发送多个 ByteBuffer 的发布者。
我是否错过了一些能够将 BodyPublisher 从一个请求连接到另一个请求的东西?
java - 如何使用 Java 11 HttpClient 和 Jackson 将 JSON 响应映射到 Java 类?
我是 Java 11 HttpClient 的新手,想试一试。我有一个返回 JSON 的简单 GET 请求,我想将 JSON 响应映射到名为Questionnaire
.
我知道我可以将开箱即用的响应变成这样的字符串或输入流
如何编写将 JSON 字符串转换为我的 Questionnaire 类的东西?
我使用 Jackson 将 JSON 转换为 Java 类实例。Jackson 是否支持新的 Java 标准 HttpClient?
更新 1 我不够精确,对此感到抱歉。我正在寻找一个阻塞获取示例。我知道http://openjdk.java.net/groups/net/httpclient/recipes.html#jsonGet
java - 使用 Java 11 HttpClient 和带有 Jackson 的自定义 BodyHandler 反序列化 JSON 停止并且不会继续
我在使用HttpClient::send
带有 custom的 Java 11 直接将 JSON 反序列化为自定义对象时遇到问题HttpResponse.BodyHandler
。我在回答这个 SO question时遇到了这个问题。
我正在使用的版本:
- 开放JDK 11
- 杰克逊 2.9.9.3
我创建了一个简单的泛型JsonBodyHandler
类,它实现HttpResponse.BodyHandler
:
该asJSON
方法定义为:
所以它返回一个自定义HttpResponse.BodySubscriber
,它获取正文String
,然后应用从 JSON 到给定的映射targetType
来测试它的代码:
和Model
班级:
输出如预期:
但是,当我将asJSON
方法更改为 readInputStream
而不是String
first 时:
它在调用读取值后挂起ObjectMapper
并且它没有继续(我已经检查它是否成功地从端点获得响应,状态代码是 200)但是它只是挂起。有谁知道可能是什么问题?
java - 如何使用 HTTP/2 over TLS 发送 HTTP 请求?(Java 11 HttpClient)
我正在尝试在 Java 应用程序中创建一个代理,它允许我修改 HTTP 请求的某些方面。
为此,我在端口 8080 上打开一个 ServerSocket,在 Mozilla Firefox 中在该端口上配置一个代理,并且对于每个连接,在单独的线程中执行 ServerSocket 的 accept() 方法。到目前为止一切正常。
为了将请求从浏览器发送到相应的网站,我使用了 Java 11 中包含的 HttpClient 库。这是我使用该库的一段代码:
注意:IHttpRequest 是我创建的一个类,其中包含从套接字收集的所有信息(目标主机、标头、正文(如果存在)等)
到目前为止,我已经成功拦截了所有指向 HTTP 网站的请求。但是,我遇到了问题,例如https://www.google.com/,它实现了 HTTP / 2 协议并使用 TLS。当我运行 Java 应用程序并访问上一个 Google 页面时,它没有向我显示网站,而是在浏览器中显示以下内容(忽略标题之间的空白):
HTTP/2 200 正常
:状态:200
alt-svc: quic = ":443"; 马 = 2592000; v = "46,43,39"
缓存控制:私有
内容编码:gzip
内容长度:46058
内容类型:文本/html;字符集 = UTF-8
日期:2019 年 9 月 3 日星期二 09:47:34 GMT
到期:星期二,2019 年 9 月 3 日 09:47:34 GMT
p3p: CP = “这不是 P3P 政策!有关更多信息,请参见 g.co/p3phelp。”
服务器:gws
设置cookie:1P_JAR = 2019-09-03-09;过期 = 格林威治标准时间 2019 年 10 月 3 日星期四 09:47:34;路径 = /; 域 = .google.com;SameSite = none NID = 188 = XOJkffugf5G8rxNLov_iqqxo-Cq5RCvhwJPNu9tvtzLesZ4q8CE0IDVt9VgCEHZsw-AV0EYaaL8D4d_2Qwb6jXCcss7RydfV9PqQFemN_Ezz0kUjyseDDbJXfrHpmqPR6GIQCnR7bjukfasxg883K9fjnhAaqz6IpUYxoguZx-vazWc; 过期 = 格林威治标准时间 2020 年 3 月 4 日星期三 09:47:34;路径 = /; 域 = .google.com;HttpOnly 同意 = WP.27dd1a; 过期 = 格林威治标准时间 2038 年 1 月 1 日星期五 00:00:00;路径 = /; 域 = .google.com
x 框架选项:SAMEORIGIN
x-xss-保护:0
(↓↓身体↓↓)
‹������ ÿÔ½ézâȲ (ú¿Ÿ‚ ¢ örÁ²À 或 PªÚ ° çyÜÞ¾ © $ Æ.ÞåžG¸ßýwþ® »™ š ¶« »× ùöíê ¢ ¤T '' '' ™ 'ß¿ († l / Æj ¢ 或 õ ßñ7¡ “QOLªV ÞU ¢ üø> Tm' ûÄ´T [L ^] îd * I7Õ Ùê Rçšb ÷ EE i²š¡ / ÜP ié0cÉDWE!ËsCò I ™ ZªI_ ‰) ## ™ '* & gš: ¦½ÒŽê¸ oŒ ‚™» † 9 $ vFQmU¶5c´Rˆ (Š © ZÖï 1L§ Üì ¦ÚUMS5W² Û $ # K'¶êæí FOWWrniCÒS-ò + Ú¨ · Åòõ¶ „÷ ñɲá 1 • 'ÙÐ
<< 还有更多字节形式的信息>>
你在我的代码中看到什么奇怪的东西吗?我知道 HTTP / 2 压缩帧中的标头,但我认为 HTTPClient 是在内部完成的......
如果您需要更多信息,请告诉我:)
先感谢您。
java - 如何使用 HTTP 选项方法和 HTTPClient (Java 11) 发送请求?
正如标题所说,我想知道如何使用 HTTPClient 和 Java 中的 OPTIONS 方法发送 HTTP 请求。我查看了可以使用的 HTTP 方法(GET、POST、PUT 和 DELETE),但我没有看到这个选项。使用 HTTPClient 的 GET/POST 请求示例如下:
如果它不能使用(这对我来说似乎非常罕见),我可以使用什么替代方案?
非常感谢您!
java - java.net.HttpClient 在进行 POST 时因 EOFException 而失败
我有一个应用程序使用 openjdk-11.0.1 java.net.HttpClient 向 REST(ish) 端点发出多部分 POST 请求。该端点在执行任何工作时都会阻止响应,当工作完成时,它会返回响应。这个端点的性质是响应可以在 1s 到 1d 之间进行,所以这个连接可以保持很长时间。
所以无论如何,最近我开始遇到以下错误,即使目标服务器上的进程似乎仍然执行得很好。有没有人对此错误的可能原因有任何想法?
这是我的 HttpClient 的创建:
更新:
我没有找到答案。升级到最新的 java 版本会有所帮助(java httpclient 的 8 对 14 改变了很多)。
此外,此响应通常由下游服务器生成,而不是客户端。这意味着我连接的服务器关闭了连接。我们认为这是因为在传输大量数据时连接被检测为“空闲”。
对于较旧的 java httpclients,关闭 keepalive 似乎也有助于解决这个问题。在实例化您的 httpclient 之前,请进行以下调用:
在每个请求上,我都会关闭连接:
引用的 HttpHeaders 类:
java - 使用 Java HttpClient 的持久连接(保持活动状态)
我们正在使用 Java 11 中添加的新(相对而言)Java HttpClient构建一个应用程序。我们使用的是 Java 12。总体而言,API 很好,但我找不到任何与持久连接相关的东西。大多数其他类似的 API 以某种方式支持连接池和持久连接,但据我所知,文档中没有提到它。
我们真的希望保持连接处于活动状态以减少 TLS 握手的延迟,并且对它的完成方式进行一些控制会很好。
这在某处得到支持和记录吗?或者客户端是否在掩护下自动使用持久连接,但没有任何 API 来控制它是如何完成的?还是根本不支持?