在介绍OkHttp的Post请求的基本使用之前 , 我们需要了解什么是Post , 以及什么是Get?对于android程序员来说 , 对这2个概念不像web工程师那样熟悉 , 在这里我们先简要说明Post和Get请求的区别:
- Post或者Get只是Http协议中向后台服务器发送数据的一种机制 , 是Http协议的一个组成部分 。
- Post请求是将要提交到后台服务器的数据放在Http包的包体中 。
- Get请求是将数据放在URL之后 , 比如http://androidxx.cn/forum.php?mo ... d=11&extra=page%3D1 , 可以看到此URL由2部分组成 , 分别是http://androidxx.cn/forum.php和?后面的参数 。这就是典型的Get请求方式 。
- 因为Get请求时直接将参数放在URL后面 , 而URL的长度是有一定的限制 , 所以当传递的数据特别大的时候 , Get请求就不能完成 。
- 相比较 , Post请求的参数是放在Http包的内部 , 不能轻易被看到;Get请求的参数直接是跟在URL之后 , 可以很容易被用户获取 。所以 , 相对而言 , Post的请求方式更安全 。
Post(当涉及到参数的安全问题或者参数比较大的时候 , 应该使用Post请求方式) , 比如:
- 登陆
- 注册
- 上传
- 支付
- 下单
- ...
- 获取图片
- 获取文章详情
- ...
- Post的同步请求方式(在android的主线程中 , 需要将下面的代码放在new Thread的run方法中执行 , 否则报错(错误详见))
- OkHttpClient okHttpClient = new OkHttpClient();
- //Form表单格式的参数传递
- FormBody formBody = new FormBody
- .Builder()
- .add("goodsId","2799")//设置参数名称和参数值
- .build();
- Request request = new Request
- .Builder()
- <font color="royalblue"> .post(formBody)//Post请求的参数传递 , 此处是和Get请求相比 , 多出的一句代码</font>
- .url(Config.POST_URL)
- .build();
- try {
- Response response = okHttpClient.newCall(request).execute();
- String result = response.body().string();
- Log.d("androixx.cn",result);
- response.body().close();
- } catch (IOException e) {
- e.printStackTrace();
- }
以上是一个Post同步请求方式代码 。Post请求的重点在参数的传递方式 , 也就是代码的第9行.post()方法 。post()方法中的参数是要传递到后台服务器的参数 , 是一个RequestBody类型的参数 。其他的代码同Get请求的基本一致 。
在实际项目开发中 , 只要是使用Post请求方式的 , 都涉及参数传递 。文章开头也说了 , Post和Get请求的最大的不同点就在参数传递 , 所以接下来我们介绍一下Post的各种格式的参数传递 。(注意:对于初学者 , 将视线重点放在Post和Get的参数传递方式上来学习OkHttp请求可能要更直观一些 , 也可能更容易理解) 。
- Form表单数据的传递(上面的代码中的FormBody就是表单参数的设置方式 , 表单数据的传递就不重复帖代码 , 代码同上)
- Json格式数据的传递
- //设置媒体类型 。application/json表示传递的是一个json格式的对象
- MediaType mediaType = MediaType.parse("application/json");
- //使用JSONObject封装参数
- JSONObject jsonObject = new JSONObject();
- try {
- jsonObject.put("参数名","参数值");
- } catch (JSONException e) {
- e.printStackTrace();
- }
- //创建RequestBody对象 , 将参数按照指定的MediaType封装
- RequestBody requestBody = RequestBody.create(mediaType,jsonObject.toString());
- Request request = new Request
- .Builder()
- .post(requestBody)//Post请求的参数传递
- .url(Config.POST_URL)
- .build();
- try {
- Response response = okHttpClient.newCall(request).execute();
- String result = response.body().string();
- Log.d("androixx.cn",result);
- response.body().close();
秒懂生活扩展阅读
- products
- 淘宝怎么刷空包裹?操作技巧介绍!
- 一般日食发生在什么时候
- 在冷凝器中的制冷剂是什么状态
- beside是什么意思
- 比亚迪后排座怎么放倒
- 天猫开店流程及入驻要求是什么?
- 冬日里,盛开在滨海小城的海棠
- happy的副词 happy
- csgo怎么换