Java 泽西岛:“;“断管”;而不是HTTP 401
我有一个上传文件的POST请求代码。它可以正确上传文件,但由于“管道破裂”而失败,而不是我在提供错误的API密钥时所期望的那样 我已经使用Postman验证了当提供了错误的API密钥时,我们的服务器是否未经授权发送401 我的印象是,我的客户机代码仍然试图向流发送一些东西,即使服务器在未经授权发送401之后已经关闭了连接 这是我正在使用的代码:Java 泽西岛:“;“断管”;而不是HTTP 401,java,jersey-2.0,Java,Jersey 2.0,我有一个上传文件的POST请求代码。它可以正确上传文件,但由于“管道破裂”而失败,而不是我在提供错误的API密钥时所期望的那样 我已经使用Postman验证了当提供了错误的API密钥时,我们的服务器是否未经授权发送401 我的印象是,我的客户机代码仍然试图向流发送一些东西,即使服务器在未经授权发送401之后已经关闭了连接 这是我正在使用的代码: try { return target .path("storage") .path("upload")
try {
return target
.path("storage")
.path("upload")
.request()
.header("Authorization", apiKeyHeader)
.header("App-Type", type)
.post(Entity.entity(Files.newInputStream(file.toPath()), APPLICATION_OCTET_STREAM), String.class);
} catch (IOException e) {
e.printStackTrace(); // <-- exception comes here
}
这是我的pom.xml配置:
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.23.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.connectors</groupId>
<artifactId>jersey-apache-connector</artifactId>
<version>2.23.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.23.1</version>
</dependency>
org.glassfish.jersey.core
泽西岛客户
2.23.1
org.glassfish.jersey.connectors
泽西apache连接器
2.23.1
org.glassfish.jersey.media
泽西岛媒体多部分
2.23.1
其思想是,只有在发送整个请求之后,才会分析报头。您正在将文件附加到请求,由于文件大小的原因,请求需要花费太多时间才能到达目的地。在某个时刻会出现超时,这就是为什么会出现断管错误,而不是401错误消息。这种行为是正常的,也是意料之中的。如果您尝试使用较小的文件(空),您将看到您将收到预期的错误消息。在接收端使用了什么技术?如果是Jetty,则当前行为可能与此问题有关:。在沟通Jersey->Jetty时,我遇到了类似的问题。401响应后,Jetty关闭了连接,但Jersey尝试使用相同的连接发出新请求,并收到断管错误。这只发生在大请求主体上。@martsraits,这听起来与我当时遇到的问题非常相似。这是接收端的码头。不再处理该代码:)
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.23.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.connectors</groupId>
<artifactId>jersey-apache-connector</artifactId>
<version>2.23.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.23.1</version>
</dependency>