发新话题

使用Socket模拟Http的GET操作

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class TestSocket {
  String host = "www.javathinker.org";
  int port = 80;
  Socket socket;

  public void createSocket() throws Exception {
    socket = new Socket("www.163.com", 80);
  }

  public void communicate() throws Exception {
    StringBuffer sb = new StringBuffer("GET / HTTP/1.1\r\n");
    sb.append("Host: www.163.com\r\n");
    sb.append("Connection: Keep-Alive\r\n");
    sb.append("Accept: */*\r\n\r\n");

    // 发出HTTP请求
    OutputStream socketOut = socket.getOutputStream();
    socketOut.write(sb.toString().getBytes());
    socket.shutdownOutput(); // 关闭输出流

    // 接收响应结果
    System.out.println(socket);

    InputStream socketIn = socket.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(socketIn));
    String data;
    while ((data = br.readLine()) != null) {
      System.out.println(data);
    }
    socket.close();
  }

  public static void main(String args[]) throws Exception {
    TestSocket client = new TestSocket();
    client.createSocket();
    client.communicate();
  }

}
快乐渡过每一天,减肥坚持每一天
编辑 回复 快速回复 TOP
只输出了:
Socket[addr=www.163.com/220.181.28.53,port=80,localport=1047]

输入流中没有东西。
编辑 回复 快速回复 TOP
把 sb.append("Host: <A href="www.163.com" target=_blank>www.163.com</A>\r\n"); 这一句改成 sb.append("Host: www.126.com\r\n");

把 socket.shutdownOutput(); // 关闭输出流注释掉。可以输出响应流了。
编辑 回复 快速回复 TOP
Socket[addr=www.163.com/220.181.28.212,port=80,localport=1820]
HTTP/1.0 403 Forbidden
Server: squid/3.0.STABLE13
Mime-Version: 1.0
Date: Fri, 03 Jul 2009 07:00:20 GMT
Content-Type: text/html
Content-Length: 1689
Expires: Fri, 03 Jul 2009 07:00:20 GMT
X-Squid-Error: ERR_ACCESS_DENIED 0
X-Cache: MISS from cache.163.com
Via: 1.0 cache.163.com (squid/3.0.STABLE13)
Connection: close

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<TITLE>错误:您所请求的网址(URL)无法获取</TITLE>
<STYLE type="text/css"><!--BODY{background-color:#ffffff;font-family:verdana,sans-serif}PRE{font-family:sans-serif}--></STYLE>
</HEAD><BODY>
<H1>错误</H1>
<H2>您所请求的网址(URL)无法获取</H2>
<HR noshade size="1px">
<>
当尝试读取以下网址(URL)时:
<A HREF="http://<ahref='www.163.com'target=_blank>www.163.com</A>/">http://<ahref='www.163.com'target=_blank>www.163.com</A>/</A>
<>
发生了下列的错误:
<UL>
<LI>
<STRONG>
Access Denied.
<BR>拒绝访问
</STRONG>
<>
Access control configuration prevents your request from
being allowed at this time. Please contact your service provider if
you feel this is incorrect.
<BR>
当前的存取控制设定禁止您的请求被接受,
如果您觉得这是错误的,请与您网路服务的提供者联系。
</UL>
</P>
<>本缓存服务器管理员:<A HREF="mailto:webmaster?subject=CacheErrorInfo%20-%20ERR_ACCESS_DENIED&body=CacheHost%3A%20cache.163.com%0D%0AErrPage%3A%20ERR_ACCESS_DENIED%0D%0AErr%3A%20%5Bnone%5D%0D%0ATimeStamp%3A%20Fri,%2003%20Jul%202009%2007%3A00%3A20%20GMT%0D%0A%0D%0AClientIP%3A%20222.68.172.164%0D%0AServerIP%3A%20%0D%0A%0D%0AHTTP%20Request%3A%0D%0AGET%20%2FA%3E%2F%20HTTP%2F1.1%0AHost%3A%20%3CA%20href%3D%27www.163.com%27%20target%3D_blank%3Ewww.163.com%3C%2FA%3E%0D%0AConnection%3A%20Keep-Alive%0D%0AAccept%3A%20*%2F*%0D%0A%0D%0A%0D%0A">webmaster</A>


<br>
<hr>
<div id="footer">
Generated Fri, 03 Jul 2009 07:00:20 GMT by cache.163.com (squid/3.0.STABLE13)
</div>
</body></html>
编辑 回复 快速回复 TOP
发新话题