Bug in HttpClient
Thomas Lußnig
openjdk at suche.org
Fri Jul 20 06:52:01 UTC 2018
*Hi,*
*i found an bug in JDK 10 with the new HttpClient. It does not handle
responses wihtout contentlength correctly.
Normally i would expect that the content is returned even without
content length. Since i can not open an JDK bug
i hope some person from the list can do it. Below is an example that
show the problem.*
*
Gruß Thomas Lußnig
*
*import*java.io.InputStream;
*import*java.io.OutputStream;
*import*java.net.InetSocketAddress;*
import*java.net.ServerSocket;*
import*java.net.Socket;*
import*java.net.URI;*
import*java.time.Duration;*
import*javax.net.ServerSocketFactory;
*import*jdk.incubator.http.HttpClient;*
import*jdk.incubator.http.HttpRequest;*
import*jdk.incubator.http.HttpResponse;
*public**class*Client1 {
*static**void*server(*final**boolean*withContentLength) {
*try*(ServerSocket ss=
ServerSocketFactory./getDefault/().createServerSocket()) {
ss.setReuseAddress(*true*);
ss.bind(*new*InetSocketAddress("127.0.0.1",80));
*final**byte*[] buf= *new**byte*[120400];
*try*(Socket s= ss.accept()) {
System.*/out/*.println("Accepted:
"+s.getRemoteSocketAddress());
*try*( OutputStream os= s.getOutputStream();InputStream is=
s.getInputStream()) {
is.read(buf);
is.read(buf);
os.write("HTTP/1.0 200 OK\r\nConnection: close\r\nContent-Type:
text/xml; charset=UTF-8\r\n".getBytes());
*if*(withContentLength) os.write("Content-Length: 4\r\n".getBytes());
os.write("\r\n".getBytes());
os.write("<x/>".getBytes());
os.flush();
}
}
} *catch*(*final*Throwable t) { t.printStackTrace(); }
}
*static**void*client() {
*try*{
*final*HttpClient client=
HttpClient./newBuilder/().version(HttpClient.Version.*/HTTP_2/*).build();
*final*HttpResponse<String> response= client
.send(HttpRequest./newBuilder/(*new*URI("http://127.0.0.1/test")).timeout(Duration./ofMillis/(120_000))
.POST(HttpRequest.BodyPublisher./fromString/("body")).build(),
HttpResponse.BodyHandler./asString/());
System.*/out/*.println("Received reply: "+
response.statusCode());
System.*/out/*.println("Received body: "+
response.body());
} *catch*(*final*Throwable t) { t.printStackTrace(); }
}
*public**static**void*main(*final*String[] args) *throws*Exception {
*new*Thread(()->/server/(*true*)).start();
/client/();
*new*Thread(()->/server/(*false*)).start();
/client/();
}
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/security-dev/attachments/20180720/9ffec920/attachment.htm>
More information about the security-dev
mailing list