首先要了解下GET和POST的区别。
HTTP定义了4种与服务器交互方法:GET,POST,PUT,DELETE。URL全称是资源描述符,可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE可以理解为就对应着对这个资源的查,改,增,删4个操作。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。GET和POST的区别主要从以下几个方面理解:

  • 用途
    根据HTTP规范,GET用于信息获取,用于获取信息而非修改信息。GET请求一般不应产生副作用。它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。对同一URL的多个请求应该返回同样的结果。 POST可能修改变服务器上的资源的请求
  • 请求数据的传递方式
    GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:buy.jsp?product=apple&amount=1111&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母或者数字,原样发送,如果是空格,转换为+,如果是中文或者其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。而POST把提交的数据则放置在是HTTP包的包体中
  • 提交数据的大小限制
    GET方式提交的数据最多只能是1024字节(GET请求中参数是附在url后面的,实际上这个长度是url长度的要求)。理论上POST没有限制,可传较大量的数据。这一点可以先简单这么理解。
  • 安全性
    POST的安全性要比GET的安全性高。比如,通过GET提交数据,用户名和密码将明文出现在URL上。
  • 常见场景
    在FORM表单中,Method默认为"GET"。在浏览器地址栏中输入url发生请求都是GET,如果要发送POST请求就需要通过提交form表单来完成。

2、Java代码发送GET和POST请求

Java中应该有好多种方式,可以发送GET和POST请求。这里介绍两种:通过HttpURLConnection和通过Apache HttpClient库。

2.1 通过HttpURLConnection发送GET和POST请求

这种方式基本上算是java原生的,不需要导入任何jar包依赖就可以运行。代码如下:

import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * Created by chengxia on 2018/12/4.
 */
public class HttpURLConnectionDemo {
    public String doPost(String URL){
        OutputStreamWriter out = null;
        BufferedReader in = null;
        StringBuilder result = new StringBuilder();
        HttpURLConnection conn = null;
        try{
            URL url = new URL(URL);
            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            //发送POST请求必须设置为true
            conn.setDoOutput(true);
            conn.setDoInput(true);
            //设置连接超时时间和读取超时时间
            conn.setConnectTimeout(30000);
            conn.setReadTimeout(10000);
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Accept", "application/json");
            //获取输出流
            out = new OutputStreamWriter(conn.getOutputStream());
            String jsonStr = "{\"qry_by\":\"name\", \"name\":\"Tim\"}";
            out.write(jsonStr);
            out.flush();
            out.close();
            //取得输入流,并使用Reader读取
            if (200 == conn.getResponseCode()){
                in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                String line;
                while ((line = in.readLine()) != null){
                    result.append(line);
                    System.out.println(line);
                }
            }else{
                System.out.println("ResponseCode is an error code:" + conn.getResponseCode());
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try{
                if(out != null){
                    out.close

相关文章: