2012-07-11 64 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