0

我尝试使用套接字连接到 www.google.com,但结果是:

HTTP/1.0 302 找到
位置:http
://www.google.com.ph/ 缓存控制:私有
内容类型:文本/html;字符集=UTF-8

这是我的Java测试代码:

    Socket sock = new Socket();  
    try {
        sock.connect(new InetSocketAddress("www.google.com", 80));
        InputStream in = sock.getInputStream();
        OutputStream out = sock.getOutputStream();

        out.write(new String("GET /\r\n").getBytes());

        byte[] readBuffer = new byte[4096];
        while(true) {
            int readSize = in.read(readBuffer);
            if(readSize < 1) break;
            System.out.println(new String(readBuffer, 0, readSize));
        }

        sock.close();
    } catch(Exception e) {

    }

这有什么问题?顺便说一句,我只需要使用套接字来实现这一点。tnx

4

2 回答 2

0

当您在浏览器中访问 google.com 时,它是否会重定向到类似 google.ca 的内容?

我这样说是因为http://en.wikipedia.org/wiki/HTTP_302表明 google.com 会被重定向。

于 2012-07-11T02:43:54.223 回答
0

www.google.com将根据您的 IP 位置重定向您。就您而言,在菲律宾,您将被重定向到www.google.com.ph. 尝试直接请求该域。

Socket sock = new Socket();  
try {
    sock.connect(new InetSocketAddress("www.google.com.ph", 80));
    InputStream in = sock.getInputStream();
    OutputStream out = sock.getOutputStream();

    out.write(new String("GET / HTTP/1.1\r\nHost: www.google.com.ph\r\n\r\n").getBytes());

    byte[] readBuffer = new byte[4096];
    while(true) {
        int readSize = in.read(readBuffer);
        if(readSize < 1) break;
        System.out.println(new String(readBuffer, 0, readSize));
    }

    sock.close();
} catch(Exception e) {
    e.printStackTrace();
}

您需要指定 HTTP 版本(在本例中为 1.1)以及 Host 标头字段(该版本需要)。

您的请求未指定版本,因此它使用了 1.0。

于 2012-07-11T02:45:54.880 回答