我正在使用Java构建服务器,以及Horstmann的 Big Java 。当我完成一个程序“只是建立与主机的连接,向主机发送GET
命令,然后从服务器接收输入,直到服务器关闭它的连接,”我决定自己尝试网站。
它返回的代码显示 nothing ,如what the html on my site looks like。事实上,它似乎完全和完全劫持了我的网站。当然,网站本身看起来总是像......
我真的不确定我在这里看到了什么。我仔细检查过代码是否正确。这个问题是在Java方面,还是在我身边?
这是Java:
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class WebGet {
public static void main(String[] args) throws IOException {
// Get command-line arguments
String host;
String resource;
if (args.length == 2) {
host = args[0];
resource = args[1];
} else {
System.out.println("Getting / from thelinell.com");
host = "thelinell.com";
resource = "/";
}
// Open Socket
final int HTTP_PORT = 80;
Socket s = new Socket(host, HTTP_PORT);
// Get Streams
InputStream instream = s.getInputStream();
OutputStream outstream = s.getOutputStream();
// Turn streams into scanners and writers
Scanner in = new Scanner(instream);
PrintWriter out = new PrintWriter(outstream);
// Send command
String command = "GET " + resource + "HTTP/1.1\n" + "Host: " + host + "\n\n";
out.print(command);
out.flush();
// Read server response
while (in.hasNextLine()) {
String input = in.nextLine();
System.out.println(input);
}
// Close the socket
s.close();
}
}
现在,返回的代码看起来像一堆广告而且相当长。为简洁起见,这是它给我的pastebin。如果需要,我会在这里添加。
答案 0 :(得分:3)
资源URI和HTTP版本片段之间需要一个空格:
String command = "GET " + resource + "HTTP/1.1\n" ...
应该是:
String command = "GET " + resource + " HTTP/1.1\n" ...
就像现在一样,您的请求如下所示:
GET /HTTP/1.1
主持人:thelinell.com
虽然对HTTP 1.1无效,但仍然被您的网络托管服务提供商拦截(可能是Simple-Request),然后将这些(令人发指的)横幅广告收集起来。