Android网络请求(2)

在android网络开发中,除get请求外常见的还有post、put、delete这三种,接下来我们将详细讲解这三种请求及参数

GET请求

我们使用过get请求了,对于我们的日常生活中get请求毫无疑问是最常用的请求方式,大部分的浏览器搜索都是通过get请求,如在百度上搜索"花",那么我们在浏览器上的地址栏中就能看到一串链接

https://www.baidu.com/s?wd=%E8%8A%B1&rsv_spt=1&rsv_iqid=0xc02e78cd00039b5a&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=5&rsv_sug1=1&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=1533&rsv_sug4=2173

在这串链接中https是传输协议,www是一个子域,也是万维网的缩写,baidu是二级域名,com是一级域名,s是访问路径,以问号开始每一个参数都是以=赋值,以&分割,等号前是参数名,等号后是参数值。

对于日常浏览中,通过get请求往往是请求一个浏览器页面,实际上是请求一串数据,因为get请求一般只用于查询数据并不会对数据库中的数据产生任何影响,所以日常开发中get请求的使用是非常频繁的。

get请求的使用方式上一章已经说过了,就不再演示了。

POST请求

post我们在浏览器上没安装插件时无法完成的,我们可以下载postman或在在线调试网站中进行post请求测试。在安全性上post请求要比get请求更加安全,同时不会暴露我们所携带的参数。但是post请求也并不绝对安全,它同样能够被抓包软件抓取数据,如果对安全性有要求,那么还需要对数据进行加密。

post请求一般用于登陆验证,创建订单等对安全性和身份验证有一定需求的场景。现在常见的post请求四大方式有:

​ (1)、application/x-www-form-urlencoded

​ (2)、multipart/form-data

​ (3)、application/json

​ (4)、text/xml

而在安卓开发中最常见的是第三个application/json,将它设置在头文件中是告诉服务端我们请求时所发送的参数是以json格式发送的。关于json是什么以及其它三种方式感兴趣的可以去找一找相关资料。

那么我们开始创建我们的post请求吧。

编写请求方法

public static String post(String src,String json){
        HttpURLConnection connection = null;
        BufferedReader reader = null;
        StringBuilder response = null;
        try{
            URL url = new URL(src);//新建URL
            connection = (HttpURLConnection)url.openConnection();//发起网络请求

            connection.setConnectTimeout(8000);//连接最大时间
            connection.setReadTimeout(8000);//读取最大时间

//            最大的差别就是修改了请求方式添加了请求头文件数据以及通过OutputStreamWriter发送了携带的json数据

            connection.setRequestMethod("POST");//请求方式
            connection.setRequestProperty("Content-Type", "application/json");
            OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
            out.write(json);
            out.flush();
            out.close();


            InputStream in = connection.getInputStream();
            reader = new BufferedReader(new InputStreamReader(in));//写入reader
            response = new StringBuilder();
            String line;
            while((line = reader.readLine()) != null){
                response.append(line);
            }
        }catch (Exception e){//异常抛出
            e.printStackTrace();
        }finally {
            if(reader != null){
                try{
                    reader.close();//io流开了要关,不然容易内存泄露
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
            if(connection != null){
                connection.disconnect();//同理,关闭http连接
            }
        }
        return response.toString();
    }

那么我们去试验一下这个请求吧,我们登录试一试,携带我们的账号密码,看看会返回什么。

String json = "{\"username\":\"test01\",\"password\":\"123456\"}";
        new Thread(new Runnable() {
            @Override
            public void run() {
                String post = InterNet.post("http://xxx.xxx.xxx/xxx-xx/xxx/login", json);//这串网址请自行使用其它可发送post请求的链接
                System.out.println(post);
            }
        }).start();

通过我们人工构造一个json数据,新建线程进行访问并打印,我们得到

Android网络请求(2)

因为我们使用的账号密码并不存在所以登录失败了,我们可以使用自己的账号密码去尝试登录自己想测试的网站,当然有些网站的登录需要二级验证,这个我们暂且不讲。

PUT请求

put请求常用于修改数据,如用户信息,密码等。使用的方法与post请求相似,只需要修改请求方式post改为put即可,一般需要携带用户认证信息token,用于确认是哪个用户需要修改自身的信息。在请求中,使用它一般只是修改信息,所以对于post请求来讲,它更加安全,post请求创建用户时是会创建数据的,put请求不会。

也不演示怎么写了,直接把上面的post请求拿过来修改connection.setRequestMethod("POST");为PUT即可。

DELETE请求

put请求的请求方式与post相识,那么delete请求的请求方式也与get请求相识,也是在get请求的基础上修改connection.setRequestMethod("GET");为DELETE即可。

DELETE请求一般用于删除表中的数据。也是可以携带数据的。如用户身份验证信息token之类的。

总结

相信看到这,大家也知道了,四种请求方法对应数据库的增删改查,但也有些后端开发人员喜欢所有的请求都通过post方式,所以大家不要固定思维,请求方式只是便于我们更好理解以及规范开发,并非一定要通过get查询,通过post增加,也可以通过delete增加数据,主要看后端开发人员是怎样规定的。

四种请求类型中post请求是对数据最安全的,但对数据库就不那么友好,因为它会增加数据库中的数据,可能会导致意外的错误,同样,这些不是我们该关系的,是服务端开发人员该去规划和设计的。

好了,四种请求方式都讲完了。接下来我们来讲讲安卓开发中最常用的网络框架---okhttp