2

我正在使用 Java 构建服务器,以及 Horstmann 的Big Java。当我完成一个“简单地与主机建立连接,向主机发送GET命令,然后从服务器接收输入直到服务器关闭其连接”的程序时,我决定在我自己的网站上尝试一下。

它返回的代码与网站上的 html 看起来完全不同。事实上,它看起来像是完全劫持了我的网站。当然,网站本身看起来还是和往常一样......

我真的不确定我在这里看到了什么。我已经仔细检查了代码是否正确。是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();
}
}

现在,返回的代码看起来像一堆广告,而且相当长。为简洁起见,这是它给我的内容的粘贴箱。如果需要,我会在此处添加。

4

1 回答 1

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),然后会吐出(令人发指的)横幅广告集合。

于 2013-04-11T00:07:12.967 回答