套接字编程:302找到

时间:2012-07-11 02:36:46

标签: java sockets

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

发现HTTP / 1.0 302 地点:http://www.google.com.ph/
缓存控制:私人
内容类型:text / 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

2 个答案:

答案 0 :(得分:0)

当您在浏览器中访问google.com时,它会重定向到google.ca吗?

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

答案 1 :(得分: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。