post

在介绍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的请求方式更安全 。
在实际项目开发过程中 , 什么时候使用Get、什么时候使用Post呢?
Post(当涉及到参数的安全问题或者参数比较大的时候 , 应该使用Post请求方式) , 比如:
  • 登陆
  • 注册
  • 上传
  • 支付
  • 下单
  • ...
Get(Get就是获取的意思 , 项目开发中 , 如果是相对简单的查询类接口可以使用Get请求方式) , 比如:
  • 获取图片
  • 获取文章详情
  • ...
以上就是Get和Post的一个简单的介绍 , 对刚入门的android程序员应该会有点帮助 。然后 , 接下来我们开始OkHttp的Post请求方式的学习 。
  • Post的同步请求方式(在android的主线程中 , 需要将下面的代码放在new Thread的run方法中执行 , 否则报错(错误详见))
  1. OkHttpClient okHttpClient = new OkHttpClient();
  2. //Form表单格式的参数传递
  3. FormBody formBody = new FormBody
  4. .Builder()
  5. .add("goodsId","2799")//设置参数名称和参数值
  6. .build();
  7. Request request = new Request
  8. .Builder()
  9. <font color="royalblue"> .post(formBody)//Post请求的参数传递 , 此处是和Get请求相比 , 多出的一句代码</font>
  10. .url(Config.POST_URL)
  11. .build();
  12. try {
  13. Response response = okHttpClient.newCall(request).execute();
  14. String result = response.body().string();
  15. Log.d("androixx.cn",result);
  16. response.body().close();
  17. } catch (IOException e) {
  18. e.printStackTrace();
  19. }
复制代码
以上是一个Post同步请求方式代码 。Post请求的重点在参数的传递方式 , 也就是代码的第9行.post()方法 。post()方法中的参数是要传递到后台服务器的参数 , 是一个RequestBody类型的参数 。其他的代码同Get请求的基本一致 。
在实际项目开发中 , 只要是使用Post请求方式的 , 都涉及参数传递 。文章开头也说了 , Post和Get请求的最大的不同点就在参数传递 , 所以接下来我们介绍一下Post的各种格式的参数传递 。(注意:对于初学者 , 将视线重点放在Post和Get的参数传递方式上来学习OkHttp请求可能要更直观一些 , 也可能更容易理解) 。
  • Form表单数据的传递(上面的代码中的FormBody就是表单参数的设置方式 , 表单数据的传递就不重复帖代码 , 代码同上)
  • Json格式数据的传递
  1. //设置媒体类型 。application/json表示传递的是一个json格式的对象
  2. MediaType mediaType = MediaType.parse("application/json");
  3. //使用JSONObject封装参数
  4. JSONObject jsonObject = new JSONObject();
  5. try {
  6. jsonObject.put("参数名","参数值");
  7. } catch (JSONException e) {
  8. e.printStackTrace();
  9. }
  10. //创建RequestBody对象 , 将参数按照指定的MediaType封装
  11. RequestBody requestBody = RequestBody.create(mediaType,jsonObject.toString());
  12. Request request = new Request
  13. .Builder()
  14. .post(requestBody)//Post请求的参数传递
  15. .url(Config.POST_URL)
  16. .build();
  17. try {
  18. Response response = okHttpClient.newCall(request).execute();
  19. String result = response.body().string();
  20. Log.d("androixx.cn",result);
  21. response.body().close();

    秒懂生活扩展阅读