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

代码:

 package p06.TCPTransferImitateServer.p01.ImitateServer;

 import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 该类模拟服务器,浏览器通过输入http://localhost:9988访问。
* @author kuangdaoyizhimei
*
*/
public class ImitateServerDemo {
public static void main(String[] args) throws IOException {
ServerSocket ss=new ServerSocket(9988);
Socket socket=ss.accept();
InputStream is=socket.getInputStream();
byte buf[]=new byte[10240];
int length=is.read(buf);
System.out.println(new String(buf,0,length));
PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);
pw.println("我是狂盗一枝梅!"); socket.shutdownOutput();
socket.close();
ss.close();
}
}

运行结果:

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

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

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

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

代码:

 package p07.TCPTransferImitateBrowser.p01.ImitateBrowser;

 /**
* 该类的作用是模拟浏览器向服务器请求一个页面,并将html代码显示出来
* 请求信息从之前获取的浏览器请求得到
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException; public class ImitateBrowser {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket=new Socket("192.168.209.1",80);
InputStream is=socket.getInputStream();
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os,true);
pw.println("GET /myWeb/index.html HTTP/1.1");
pw.println("Host: localhost");
pw.println("Connection: close");//这里写close
pw.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
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");
pw.println("Accept-Encoding: gzip,deflate,sdch");
pw.println("Accept-Language: zh-CN,zh;q=0.8,en;q=0.6");
pw.println();
pw.println();
pw.flush();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String str=null;
System.out.println("响应内容:");
while((str=br.readLine())!=null)
{
System.out.println(str);
}
br.close();
socket.close();
}
}

运行结果:

三、注意事项

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

【JAVA网络流之浏览器与服务器模拟】的更多相关文章

  1. java Socket Tcp 浏览器和服务器(二)

    package cn.itcast.net.p2.ie_server; import java.io.IOException;import java.io.InputStream;import jav ...

  2. java Socket Tcp 浏览器和服务器(一)

    自定义服务端,使用已有的客户端IE,了解一下客户端给服务端发了什么请求? 发送的请求是: GET / HTTP/1.1  请求行  请求方式  /myweb/1.html  请求的资源路径   htt ...

  3. 浏览器与服务器交互原理以及用java模拟浏览器操作v

    浏览器应用服务器JavaPHPApache * 1,在HTTP的WEB应用中, 应用客户端和服务器之间的状态是通过Session来维持的, 而Session的本质就是Cookie, * 简单的讲,当浏 ...

  4. Java Web实现使用浏览器从服务器下载文件(后台)

    Java Web实现 使用浏览器从服务器下载文件. 下面实现两种情况的下载,需求如下: 需求(一):1.用户在页面填写表单. 2.填写完成后,选择下载,将表单内容发往后台. 3.后台根据内容生产一个文 ...

  5. JavaWeb学习笔记——开发动态WEB资源(一)Java程序向浏览器输出数据

    开发一个动态web资源,即开发一个Java程序向浏览器输出数据,需要完成以下2个步骤: 1.编写一个Java类,实现Servlet接口 开发一个动态web资源必须实现javax.servlet.Ser ...

  6. [置顶] Asp.Net底层原理(一、浏览器和服务器的交互原理)

    …… 一.浏览器和服务器的交互原理 二.写自己的"迷你"Asp.net框架 三.Asp.Net的请求与响应过程 1.在此之前,首先简单的模拟一下我们去请求一个网址的时候,浏览器和服 ...

  7. 徒手用Java来写个Web服务器和框架吧<第二章:Request和Response>

    徒手用Java来写个Web服务器和框架吧<第一章:NIO篇> 接上一篇,说到接受了请求,接下来就是解析请求构建Request对象,以及创建Response对象返回. 多有纰漏还请指出.省略 ...

  8. 浏览器和服务器实现跨域(CORS)判定的原理

    前端对Cross-Origin Resource Sharing 问题(CORS,中文又称'跨域')应该很熟悉了.众所周知出于安全的考虑,浏览器有个同源策略,对于不同源的站点之间的相互请求会做限制(跨 ...

  9. 各种容器与服务器的区别与联系 Servlet容器 WEB容器 Java EE容器 应用服务器 WEB服务器 Java EE服务器

    转自:https://blog.csdn.net/tjiyu/article/details/53148174 各种容器与服务器的区别与联系 Servlet容器 WEB容器 Java EE容器 应用服 ...

随机推荐

  1. String与InputStream互转的几种方法

    [java] view plain copy /** * 利用BufferedReader实现Inputstream转换成String <功能详细描述> * * @param in * @ ...

  2. 数据流图DFD画法

    数据流图(DFD- Data Flow Diagram)让系统分析者弄清楚"做什么"的问题,其重要性就不言而喻了.那么我们怎么画数据流图呢?数据流图与系统流程图又有什么区别呢? 步 ...

  3. Ext 下拉列表模糊搜索

    /** * Created by huangbaidong on 2016/9/18. * 楼盘通用Combo组件,支持模糊查询 * 使用案例: * { fieldLabel : '楼盘名称', xt ...

  4. C#中堆和栈的区别分析

    线程堆栈:简称栈 Stack托管堆: 简称堆 Heap 使用.Net框架开发程序的时候,我们无需关心内存分配问题,因为有GC这个大管家给我们料理一切.如果我们写出如下两段代码: 1 代码段1: 2 3 ...

  5. java 中for each语句

    [转]java foreach 使用   foreach语句是java5的新特征之一,在遍历数组.集合方面,foreach为开发人员提供了极大的方便.   foreach语句是for语句的特殊简化版本 ...

  6. 【leetcode】Next Permutation

    Next Permutation Implement next permutation, which rearranges numbers into the lexicographically nex ...

  7. wxpython 基本的控件 (按钮)

    使用按钮工作 在wxPython 中有很多不同类型的按钮.这一节,我们将讨论文本按钮.位图按钮.开关按钮(toggle buttons )和通用(generic )按钮. 如何生成一个按钮? 在第一部 ...

  8. Unity3d运行时动态修改材质

    void Start () { const string MainTexVariableName = "_MainTex"; var renders = gameObject.Ge ...

  9. ios CoreData NSManagedObject 生命周期

    用同样的检索条件从context检索出的对象是一个????所以 在主页的3个brand没法释放,在仅仅处理brand的时候???? 和 多个 context无关 我重写了NSManagedObject ...

  10. linux日常小坑

    一.权限 1.文件权限 改动文件权限和所有权的命令有如下两个: chmod -更改权限 chown -更改所有权 不过,只有用户是当前所有者或者根用户,才能实际更改文件的权限或所有权,这一点大家要注意 ...