网络——提交表单数据(post方式)

来源:互联网 发布:数据分析师笔试逻辑 编辑:程序博客网 时间:2024/05/21 18:49

【0】README

1) 本文文字描述 转自 core java volume 2 , 旨在理解 网络——提交表单数据 的基础知识 ;
2) for source code, please visit https://github.com/pacosonTang/core-java-volume/tree/master/coreJavaAdvanced/chapter3/postRequest


【1】提交表单数据(post方式)相关

0)执行server 端脚本过程中的数据流:
这里写图片描述

1)在向web server 发送消息时, 通常会用到两个命令: GET AND POST; (干货——在向web server 发送消息时, 通常会用到两个命令: GET AND POST;)
2)get 提交方式

  • 2.1)使用get的时候, 只需要将参数添加到 URL 的结尾处即可, 这种 URL 的格式如下:

    http://host/script?parameters

  • 2.2) get 命令有一个缺点: 大多数浏览器对 get 请求中可以包含的字符数做了限制; (干货——get 命令有一个缺点)

3)post 提交方式

  • 3.1)在使用 post 命令时, 并不需要再URL 中添加任何参数, 而是从 URLConnection 中获取输出流, 并将 名-值对写入到流中。
  • 3.2)POST提交方式,提交数据到 server 的详细过程: (干货——POST提交方式,提交数据到 server 的详细过程)

    • step1) 创建一个URLConnection对象;

      URL url = new URL(urlName);
      URLConnection connection = url.openConnection();

    • step2)调用 setDoOutput 方法建立一个用于输出的连接:

      connection.setDoOutput(true);

    • step3)调用 getOutputStream 方法获得一个流, 可以通过这个流向 server 发送数据, 如果要向 server 发送文本消息, 那么可以非常方便地将流包装在 PrintWriter 对象中:

      PrintWriter out = new PrintWriter(connnection.getOutputStream());

    • step4) 向 server 发送数据;

      out.println(name1 + “=” + URLEncoder.encode(value1, “UTF-8”) + “&”);

    • step5)关闭输出流:

      out.close();

4)在读取响应过程中会碰到一个问题:

  • 4.1) 如果脚本运行错误,那么调用 connection.getInputStream() 时就会抛出一个 FileNotFoundException 异常。但是此server 仍然会向 浏览器返回一个 错误页面(常见的404 错误);
  • 4.2)为了捕捉这个错误页面, 可以将 URLConnection 对象转换为 HttpURLConnection 类并调用它的 getErrorStream 方法: (干货——如何捕捉这个错误页面)

    InputStream err = ((HttpURLConnection) connection).getErrorStream();


5) 人们常会问: 除了我们提供的 数据外, URLConnection 到底还向server 发送了什么信息: (干货——除了我们提供的数据外,URLConnection 到底还向server 发送了什么信息?)
  • 5.1) URLConnection 对象首先向 server 发送一个 请求头。 当提交表单数据时, 该请求头包含下面这行内容:

    Content-Type:application/x-www-form-urlencoded

  • 5.2)而 POST 的请求头还必须包括内容长度, 如

    Content-Length:24;

  • 5.3)请求头必须以空白行结尾。 紧随其后的才是数据部分。 web server 过滤掉请求头后将数据部分发送给server 端 脚本程序;

Attention) URLConnection 对象会把 你发送到 输出流的所有数据都缓存起来, 这是因为在真正发送前, 它必须首先确定内容的总长度;
6) 看个荔枝: (示例代码 用于将 Post 数据发送给任何脚本, 他将数据放在如下的 .properties 文件:

url = http://esa.un.org/unpd/wpp/unpp/p2k0data_script.asp
Panel=1
Variable=2
Location=404
Varient=2
StartYear=1950
EndYear=2050

这里写图片描述
这里写图片描述

0 0
原创粉丝点击