问题标签 [apache-httpclient-5.x]
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 - 重用从 Server 获取的 HttpConnection 用于 HttpClient
我的任务是创建一个模块,该模块将包含一个服务器,将向该服务器发送HTTP
请求。对于每个这样的请求,HttpConnection
(或Socket
)应该由http客户端获取并重用,以使用相同的连接发回请求。
相反的事情将在另一边完成 - 重用从 http 客户端(启动通信)到 http 服务器的连接,它将使用该连接来侦听传入的请求。
作为服务器和与服务器相关的库,我不拘泥于任何技术,可以使用最适合的任何技术。
如果我在 SpringBoot 控制器的 GET 方法中,我需要这样的东西:
我在 Go 中看到过这样的实现,它实际上是一些代码行。有一种Hijack()
方法可以从服务器获取连接并在 http 客户端中重用它。
该模块将在 SpringBoot 内部运行,作为 Web 应用程序的一部分,需要与第三方应用程序通信。
我有两种选择:使用一些标准库,如 Apachehttpcomponents
或 Java 11HttpClient
或其他相关库,或者作为替代方案使用Socket
s 实现我自己的服务器。
到目前为止,找不到合适的库,恐怕需要使用套接字进入较低级别。感谢您对图书馆的任何帮助。
javascript - 坏块头(Apache Http / Jasper / JSP)
我正在尝试制作一个 Jasper 客户端,其流程如下:它们是两个应用程序。一个调用另一个并由 iframe 显示。
主应用程序将凭据发送到 iframe 应用程序以获取会话并执行报告执行。
iframe 应用程序进行 REST 调用以获取会话,然后调用另一个以请求运行报告。结果是一个重定向到加载屏幕的链接。
资源
当主应用程序收到 URL 时,他会显示加载页面。加载屏幕的工作方式如下……等待 10 秒,然后重定向到另一个 servlet,它在该处请求报告的执行状态。如果报告准备好了,它会重定向到下载它的屏幕,如果它还没有准备好,那么它会重定向到加载屏幕。(我给你看这个是因为我怀疑这个)
问题从这里开始。当我尝试请求上一步时,我在控制台中收到此错误消息:
但在我得到这个之前,我注意到我使用 javascript 进入了这一部分。(顺便说一句,接收到 401,这意味着我的会话似乎无效,即使我保存在 cookie 中的信息与登录 web 服务抛出的会话 cookie 完全相同。也许我错过了一些东西来保持这种视觉活跃) 然后如果我尝试再次执行调用序列,则会收到错误消息。
我可以读到默认情况下,apache 具有 maxKeepAliveRequests = 100 的属性。我怀疑我的 javascript 可能会触发这个,因为可能在循环内部(在 javascript - JSP 之间)它正在打开连接(这只是怀疑)。
我在没有连接两个应用程序的情况下拨打了所有电话,它们运行良好,我能够下载报告。当我尝试连接两个应用程序时会出现此问题...
我可以在这里做什么?
java - 如何忽略 Apache HttpComponents HttpClient 5.1 中的 SSL 证书错误
如何绕过Apache HttpComponents HttpClient 5.1的证书验证错误?
我找到了一个可行的解决方案来绕过 HttpClient 4.5 中建议自定义HttpClient
实例的此类错误:
但它不适用于 HttpClient 5.1,因为setSSLContext
和setSSLHostnameVerifier
方法不存在HttpClientBuilder
(HttpClients.custom()
返回)。
java - 如何在 Apache HttpClient 5.1 中跟踪 POST 的重定向
我正在寻找如何在Apache HttpClient 5.1中将 POST 请求重定向为 POST
默认情况下,仅自动遵循导致重定向的GET请求。如果使用 HTTP 301(永久移动)或 302(临时移动)响应POST请求,则不会自动遵循重定向。这是由HTTP RFC 2616指定的
但是,有些用例必须将 POST 请求重定向为 POST。在这种情况下,必须更改默认行为以放松严格的 HTTP 规范。
对于Apache HttpClient 4.5,这可以通过将DefaultRedirectStrategy替换为LaxRedirectStrategy或使用您自己的RedirectStrategy接口的自定义实现来轻松实现。例子:
- Apache HttpClient 4.5 将 POST 请求重定向到 GET 请求
- https://www.baeldung.com/httpclient-redirect-on-http-post
在Apache HttpClient 5.1中,这不再起作用。RedirectStrategy接口已更改,不再包含getRedirect方法,LaxRedirectStrategy实现也已被删除。
有没有一种方法可以覆盖Apache HttpClient 5.1中的默认 POST 重定向行为,或者与HttpClient 4.5中的一样简单?
java - 使用 Apache HTTPClient 5.1 我收到错误:java.lang.IllegalStateException: Current state = RESET, new state = FLUSHED
使用 Java 1.8.0_301。雄猫 9.0。
在 Windows 上运行时,我没有问题。部署到 Linux 时出现此错误。我尝试了很多东西,确保在 Windows 和 Linux 上使用相同的 jar。升级到最新的 Java 1.8.0 jre。
我正在使用 SSL 并加载私钥证书。该项目很复杂,这是我正在使用的方法:
这是我得到的错误:
java.lang.IllegalStateException:当前状态 = RESET,新状态 = FLUSHED 在 java.nio.charset.CharsetEncoder.throwIllegalStateException(CharsetEncoder.java:992) 在 java.nio.charset.CharsetEncoder.flush(CharsetEncoder.java:675) 在org.apache.hc.client5.http.utils.ByteArrayBuilder.doAppend(ByteArrayBuilder.java:107) 上的 org.apache.hc.client5.http.utils.ByteArrayBuilder.encode(ByteArrayBuilder.java:83)。 hc.client5.http.utils.ByteArrayBuilder.append(ByteArrayBuilder.java:149) 在 org.apache.hc.client5.http.utils.ByteArrayBuilder.append(ByteArrayBuilder.java:161) 在 org.apache.hc.client5。 http.utils.ByteArrayBuilder.append(ByteArrayBuilder.java:168) 在 org.apache.hc.client5.http.impl.auth.BasicScheme.generateAuthResponse(BasicScheme.java:183) 在 org.apache.hc.client5.http。 impl.auth.HttpAuthenticator.addAuthResponse(HttpAuthenticator.java:347) 在 org.apache.hc.client5.http.impl.classic.ProtocolExec.execute(ProtocolExec.java:156) 在 org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java: 51) 在 org.apache.hc.client5.http.impl.classic.HttpRequestRetryExec.execute(HttpRequestRetryExec.java 的 org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed(ExecChainElement.java:57) :96) 在 org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51) 在 org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed(ExecChainElement. java:57) 在 org.apache.hc.client5.http.impl.classic.ContentCompressionExec.execute(ContentCompressionExec.java:133) 在 org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement. java:51) 在 org.apache.hc.client5.http.impl.classic.ExecChainElement$1。在 org.apache.hc.client5.http.impl.classic.RedirectExec.execute(RedirectExec.java:115) 在 org.apache.hc.client5.http.impl.classic.ExecChainElement 继续(ExecChainElement.java:57)。在 org.apache.hc.client5.http.impl.classic.CloseableHttpClient 在 org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute(InternalHttpClient.java:179) 处执行(ExecChainElement.java:51)。在 com.orchestranetworks.ps.http.client.HTTPClient.executePost(HTTPClient.java:229) 在 com.orchestranetworks.ps.http.client.HTTPClient.executePost(HTTPClient.java:132) 执行(CloseableHttpClient.java:75)在 com.orchestranetworks.ps.http.client.HTTPClient.sendMessage(HTTPClient.java:68) 在 com.orchestranetworks.ps.messaging.IntegrationClientManager.submitMessage(IntegrationClientManager.java:270) 在 com.orchestranetworks.ps.messaging.IntegrationClientManager .sendMessage(IntegrationClientManager.java:103) 在 com.orchestranetworks.ps.messaging.IntegrationClientManager.sendMessage(IntegrationClientManager.java:87) 在 com.orchestranetworks.ps.messaging.scripttask.SendMessageScriptTask.sendMessage(SendMessageScriptTask.java:33) 在 com .orchestranetworks.ps.messaging.scripttask.SendMessageScriptTask.processNewAdaptationDiff(SendMessageScriptTask.java:56) 在 com.orchestranetworks.ps.scripttask.ProcessDataspacesDifferences.processTableDiff(ProcessDataspacesDifferences.java:114) 在 com.orchestranetworks.ps.scripttask.ProcessDataspacesDifferences.processDiffs (ProcessDataspacesDifferences.java:86) 在 com.orchestranetworks.ps.scripttask.ProcessDataspacesDifferences.executeScript(ProcessDataspacesDifferences.java:60) 在 com.orchestranetworks.workflow.impl.execution.ja(j.java:376) 在 com.orchestranetworks。工作流程。impl.execution.ja(j.java:52) at com.orchestranetworks.workflow.impl.execution.jb(j.java:188) at com.orchestranetworks.workflow.impl.execution.ja(j.java:390)在 com.orchestranetworks.workflow.impl.execution.ja(j.java:822) 在 com.orchestranetworks.workflow.impl.execution.h.handleQueueEntry(h.java:17) 在 com.orchestranetworks.workflow.impl.execution .n$a.run(n$a.java:10) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ) 在 java.lang.Thread.run(Thread.java:748)handleQueueEntry(h.java:17) at com.orchestranetworks.workflow.impl.execution.n$a.run(n$a.java:10) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748)handleQueueEntry(h.java:17) at com.orchestranetworks.workflow.impl.execution.n$a.run(n$a.java:10) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748)
sockets - 如何强制 Apache HttpClient 5.x 和服务器完全关闭 TCP 连接?
我正在开发一个编写客户端-服务器应用程序的项目。我是网络概念的新手,我正在使用 HttpClient 5.x 向我的服务器发出请求。我想完全断开客户端和服务器之间的 TCP 连接。
当我使用 client.close() 时,它仍然允许服务器发送响应。我知道 close 方法不允许客户端发出任何新请求,但服务器将能够向同一连接发送响应。即使服务器正在后台处理我的请求,我如何也可以强制客户端和服务器都断开连接?甚至可能吗?
我的代码:
java - Java 11 HttpClient 通过代理对 HTTPS 资源的请求
需要通过代理执行 REST 请求。有几个 HTTP 代理服务器可用,受基本身份验证保护。使用 Java 16。
访问 HTTP 资源时完全正常工作的请求示例:
这是一个携带有关代理服务器信息的对象:
请求 HTTPS 资源时,例如https://yandex.ru,我收到错误 407(需要代理身份验证)。
我目前正在使用基于 Apache HttpClient 5 的解决方法:
但是,Apache HttpClient 依赖项相当重量级,我真的很想留在纯 Java 的框架内。
是否可以使用内置的 HttpClient 通过代理访问 HTTPS 资源?
spring-boot - 使用 Apache HttpComponents 使用 Webflux Webclient 配置 SSL
我正在尝试从 restTemplate 迁移到 webClient。
一切都很好,直到我使用ClientHttpRequestFactory
.
我在这里粘贴旧代码和新代码。
------带有restTemplate的旧代码-----
------带有webClient的新代码-----
当我运行项目时,我得到了这个异常:
Caused by: java.lang.ClassCastException: class org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager cannot be cast to class org.apache.hc.client5.http.nio.AsyncClientConnectionManager (org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager and org.apache.hc.client5.http.nio.AsyncClientConnectionManager are in unnamed module of loader 'app')
spring - 通过 Spring WebClient 和 HttpComponentsClientHttpConnector 执行 http 请求时出现 NTLM 身份验证问题
我尝试使用Apache HttpClient 5执行 http 请求,并且我需要 NTLM 身份验证,该客户端开箱即用地支持该身份验证。但是当我尝试通过 HttpComponentsClientHttpConnector 将它与 Spring WebClient 一起使用时,出现了一个问题。
HttpComponentsClientHttpConnector初始化HttpComponentsClientHttpRequest以执行请求。但是如果请求有正文,HttpComponentsClientHttpRequest会初始化 ReactiveEntityProducer,这是不可重复的,因此,虽然我需要执行 3 个请求以使用 NTLM 进行身份验证,但实际上只发生了一个。
是否有可能改变这种行为?
UPD
添加了我的原型 java 代码:
java - CloseableHttpClient 启用跟随重定向
我正在尝试使用 apache http 客户端(org.apache.hc.client5.http)实现跟踪器。
在第一部分中,我需要发出请求 GET 关闭 FOLLOW REDIRECT。为此,请使用以下代码:
}
爬虫的第二部分必须对位置返回的 URL 执行请求 POST,并设置 cookie。但是,对于这个请求,我需要客户端遵循重定向。
如何创建客户端使用的代码禁用了重定向,如下disableRedirectHandling中所示:
我的问题是我应该如何启用和禁用 disableRedirectHandling?
在 CloseableHttpClient 类中,我还没有确定允许我执行此操作的方法。
我应该如何在 HTTP 客户端上进行这些修改?