如何解决为什么 Glassfish Jersey 会为大型邮件正文发送格式错误的请求正文?
以下问题出现在最新版本“3.0.2”中。这些是我的依赖项:
dependencies {
compile "org.glassfish.jersey.core:jersey-client:3.0.2"
implementation 'org.glassfish.jersey.inject:jersey-hk2:3.0.2'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
}
当执行以下 post 请求时,对于任何长度大于或等于 65840 的实体,在服务器收到的请求正文格式错误。
import jakarta.ws.rs.client.Client;
import jakarta.ws.rs.client.ClientBuilder;
import jakarta.ws.rs.client.Entity;
import jakarta.ws.rs.core.Response;
public class MyClass {
public static void main(String[] args) {
Client client = ClientBuilder.newClient();
// int count = 65839; // Works
int count = 65840; // Doesn't work
String body = new String(new char[count]).replace("\0","A");
assert (body.length() == count);
Response response = null;
try {
response = client.target("http://localhost:8888/")
.request()
.post(Entity.text(body));
} catch (Exception e) {
e.printstacktrace();
}
}
}
要重现该问题,请运行服务器,nc -l 8888 > output.txt
,然后运行 Java 代码。
输出如下所示:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPOST / HTTP/1.1
Content-Type: text/plain
User-Agent: Jersey/3.0.2 (HttpUrlConnection 1.8.0_212)
Host: localhost:8888
Accept: text/html,image/gif,image/jpeg,*; q=.2,*/*; q=.2
Connection: keep-alive
Content-Length: 65840
AAAAAAAAAAAAAAAAA... (Rest Of The Body)
对于长度小于 65840 的任何正文,输出如下所示:
POST / HTTP/1.1
Content-Type: text/plain
User-Agent: Jersey/3.0.2 (HttpUrlConnection 1.8.0_212)
Host: localhost:8888
Accept: text/html,*/*; q=.2
Connection: keep-alive
Content-Length: 65839
AAAAAAAAAAAAAAAAA... (Rest Of The Body)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。