【JAVA网络流之浏览器与服务器模拟】

一、模拟服务器获取浏览器请求http信息

代码:

 1 package p06.TCPTransferImitateServer.p01.ImitateServer;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.io.PrintWriter;
 6 import java.net.ServerSocket;
 7 import java.net.Socket;
 8 /**
 9  * 该类模拟服务器,浏览器通过输入http://localhost:9988访问。
10  * @author kuangdaoyizhimei
11  *
12  */
13 public class ImitateServerDemo {
14     public static void main(String[] args) throws IOException {
15         ServerSocket ss=new ServerSocket(9988);
16         Socket socket=ss.accept();
17         InputStream is=socket.getInputStream();
18         byte buf[]=new byte[10240];
19         int length=is.read(buf);
20         System.out.println(new String(buf,0,length));
21         PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);
22         pw.println("我是狂盗一枝梅!");
23         
24         socket.shutdownOutput();
25         socket.close();
26         ss.close();
27     }
28 }
View Code

运行结果:

1.服务端(得到浏览器请求信息):

2.浏览器端(显示服务端响应的内容):

二、模拟浏览器向服务器发出请求并获取服务器的响应内容。

这里使用的服务器软件:apache

代码:

 1 package p07.TCPTransferImitateBrowser.p01.ImitateBrowser;
 2 
 3 /**
 4  * 该类的作用是模拟浏览器向服务器请求一个页面,并将html代码显示出来
 5  * 请求信息从之前获取的浏览器请求得到
 6  */
 7 import java.io.BufferedReader;
 8 import java.io.IOException;
 9 import java.io.InputStream;
10 import java.io.InputStreamReader;
11 import java.io.OutputStream;
12 import java.io.PrintWriter;
13 import java.net.Socket;
14 import java.net.UnknownHostException;
15 
16 
17 public class ImitateBrowser {
18     public static void main(String[] args) throws UnknownHostException, IOException {
19         Socket socket=new Socket("192.168.209.1",80);
20         InputStream is=socket.getInputStream();
21         OutputStream os=socket.getOutputStream();
22         PrintWriter pw=new PrintWriter(os,true);
23         pw.println("GET /myWeb/index.html  HTTP/1.1");
24         pw.println("Host: localhost");
25         pw.println("Connection: close");//这里写close
26         pw.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
27         pw.println("User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.103 Safari/537.36");
28         pw.println("Accept-Encoding: gzip,deflate,sdch");
29         pw.println("Accept-Language: zh-CN,zh;q=0.8,en;q=0.6");
30         pw.println();
31         pw.println();
32         pw.flush();
33         BufferedReader br=new BufferedReader(new InputStreamReader(is));
34         String str=null;
35         System.out.println("响应内容:");
36         while((str=br.readLine())!=null)
37         {
38             System.out.println(str);
39         }
40         br.close();
41         socket.close();
42     }
43 }
View Code

运行结果:

三、注意事项

两个程序中的请求行和请求实体之间必须有一行空行,否则请求失败,这里使用pw.println();实现空行

原文地址:https://www.cnblogs.com/kuangdaoyizhimei/p/4238310.html