2012-07-11 13 views
0

进出口试图使用套接字连接到www.google.com但结果是:Socket编程:302实测值

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

+0

它没什么问题,你想达到什么目的? – Ruel 2012-07-11 02:40:50

+0

那为什么说302找到了?这是对我正在制作的一个项目的测试,我必须在网页上显示一些值并将其与我的项目集成。 – tambalolo 2012-07-11 02:56:17

+0

302是重定向的HTTP代码。这不是一个错误,你只需要让程序遵循重定向。 – Ruel 2012-07-11 02:59:12

回答

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。

+0

的确,我在菲尔。但仍然是相同的结果.. 302找不到 ,当我使用浏览器时,它不会将我重定向到google.com.ph – tambalolo 2012-07-11 02:55:10

+0

如何添加'http://'?它不会重定向您,可能是因为您在浏览器中存在的Cookie。 – Ruel 2012-07-11 03:03:40

+0

是的,已经添加了,但我得到了java.net.UnknownHostException:http://www.google.com – tambalolo 2012-07-11 03:15:42