4

Android网络请求(2) - 高同学,你好

 1 year ago
source link: https://www.cnblogs.com/nhgtx/p/16915605.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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数据,新建线程进行访问并打印,我们得到

3034026-20221122164105637-458930936.png

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK