模拟浏览器向服务器发送和接收数据

    技术2026-01-18  2

    创建一个服务器程序,用来接收和返回数据:

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(request.getMethod()); //获取请求方式 System.out.println(request.getHeader("referer")); //获取请求页面 System.out.println(request.getParameter("name")); //获取参数 response.getOutputStream().write("Hello".getBytes()); //向浏览器回送数据 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }

    接下来,再创建一个Java程序向这个服务器程序发送请求,类 HttpURLConnection提供方法获取和发送请求数据.但是构造方法

        protected HttpURLConnection(URL u)

    表明我们不能直接创建这个对象,也没有任何静态方法能够返回这个对象.于是我们需要绕一把..先获得 URL对象,再利用openConnection()返回HttpURLConnection对象:

    public void sendHttp() throws IOException{ URL url = new URL("http://localhost:8080/ImitateRequest/servlet/servlet"); //设置要访问的链接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //获取HttpURLConnection的对象 conn.setDoOutput(true); //默认值为false,不能传递参数 conn.setRequestMethod("POST"); //设置请求方式 conn.setRequestProperty("referer", "http://www.sina.com/index.html"); OutputStream out = conn.getOutputStream(); out.write("name=aaaa".getBytes()); //向服务器发送一个值为"aaaa"的name参数,如果conn的DoOutput属性值为false,此处将抛出异常 conn.getResponseCode(); //获取响应状态码 }

    以上是发送一次请求需要掌握的方法,接下来是读取一次请求:

    public void readHttp() throws IOException{ URL url = new URL("http://localhost:8080/ImitateRequest/servlet/servlet"); //设置请求的链接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); System.out.println(conn.getResponseCode()); //查看响应状态码 System.out.println(conn.getHeaderField("Content-Length")); //响应文本内容的长度 InputStream in = conn.getInputStream(); //获取一个和服务器返回的内容相关联的流 try{ int len = 0; byte[] buffer = new byte[1024]; while((len = in.read(buffer))>0){ System.out.println(new String(buffer,0,len)); //输出到控制台 } }finally{ if(in!=null) try{ in.close(); }catch(Exception e){ } } }

    常用的一些HTTP协议请求头:

    Request

    GET /h.gif?pid=113&monkey=cool HTTP/1.1

    请求方式  请求路径  请求版本

    Accept

    image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5

    浏览器可接收的类型

    Referer

    http://hao123.com/

    来源路径

    Accept-Language

    zh-CN

    浏览器可以接收的语言

    User-Agent

    Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)

    浏览器的厂商信息

    Content-Type

    text/html; charset=UTF-8

    数据的内容类型

    Accept-Encoding

    gzip, deflate

    浏览器可以接收压缩后的数据

    Host

    nsclick.baidu.com

    请求的主机IP和端口号

    Content-Length

    289

    用于指定数据的总长度

    Connection

    Keep-Alive

    维持一个活动连接

    Cache-Control

    no-cache

    缓存情况

    Cookie

    BAIDUID=304614CF0781D6FABA00280E60983AF5:FG=1

    COOKIE

    最新回复(0)