我尝试使用套接字连接到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
答案 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。