I am following the "4. Java Socket Client Example: a HTTP Client" instruction from https://www.codejava.net/java-se/networking/java-socket-client-examples-tcp-ip in my Mac using IntelliJ.
The Http config is as easy as:
PrintWriter writer = new PrintWriter(output, true);
writer.println("HEAD " + url.getPath() + " HTTP/1.1");
writer.println("Host: " + hostname);
writer.println("User-Agent: Simple Http Client");
writer.println("Accept: text/html");
writer.println("Accept-Language: en-US");
writer.println("Connection: close");
writer.println();
I copied the code without any change in the IntelliJ to test how would it work. However, after I did "java HttpClient.java" and "java HttpClient http://www.codejava.net/java-core" as indicated, what I got is:
HTTP/1.1 400 Bad Request
Date: Mon, 04 May 2020 07:51:30 GMT
Server: Apache
Content-Length: 420
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<p>Additionally, a 400 Bad Request
error was encountered while trying to use an ErrorDocument to handle the request.</p>
<hr>
<address>Apache Server at gator3107.hostgator.com Port 80</address>
</body></html>
I tried many solutions but none of them works for me. The only problem I found is that the HttpClient.class compiled with java version 11 missed lines of
writer.println("HEAD " + url.getPath() + " HTTP/1.1");
writer.println("Host: " + hostname);
then I changed java version to 1.8 it added the missing lines, but the error did not change. The interesting thing is, one of my friend doing the same thing in windows got everything as expected.
Any help would be appreciated.