0

ソケットを使用してwww.google.comに接続しようとしていますが、結果は次のとおりです。

HTTP / 1.0 302検出
場所:http
://www.google.com.ph/ Cache-Control:private
Content-Type:text / html; charset = 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.comIP の場所に基づいてリダイレクトされます。あなたの場合、フィリピンでは、にリダイレクトされ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 に答える