Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 泽西岛:“;“断管”;而不是HTTP 401_Java_Jersey 2.0 - Fatal编程技术网

Java 泽西岛:“;“断管”;而不是HTTP 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")

我有一个上传文件的POST请求代码。它可以正确上传文件,但由于“管道破裂”而失败,而不是我在提供错误的API密钥时所期望的那样

我已经使用Postman验证了当提供了错误的API密钥时,我们的服务器是否未经授权发送401

我的印象是,我的客户机代码仍然试图向流发送一些东西,即使服务器在未经授权发送401之后已经关闭了连接

这是我正在使用的代码:

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>