一:概述

1.说明

  java与android都可以使用。

  是网络请求的开源框架。

  square公司开发,用于替代HttpUrlConnection和Apache  HttpClient

2.优点

  • 支持HTTP2/SPDY(SPDY是Google开发的基于TCP的传输层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。)
  • socket自动选择最好路线,并支持自动重连,拥有自动维护的socket连接池,减少握手次数,减少了请求延迟,共享Socket,减少对服务器的请求次数。
  • 基于Headers的缓存策略减少重复的网络请求。
  • 拥有Interceptors轻松处理请求与响应(自动处理GZip压缩)。

3.功能

  • PUT,DELETE,POST,GET等请求
  • 文件的上传下载
  • 加载图片(内部会图片大小自动压缩)
  • 支持请求回调,直接返回对象、对象集合
  • 支持session的保持

4.准备项目

  在这里需要使用两个项目进行实验。

  调用的项目:

    需要添加使用okhttp包,使用端口8090.

  

  被调用的项目:

    使用端口8080

    是一个普通的项目即可。

二:程序GET

1.get的普通使用

  被调用程序

package com.jun.web2forokhttp.okhttp;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import java.util.HashMap;
import java.util.Map; @RestController
public class GetReq {
@GetMapping("/ok/getInfo")
public Map getInfo(@RequestParam("type") String type){
Map map =new HashMap();
if("1".equals(type)){
map.put("1","aa");
map.put("2","bb");
}else {
map.put("3","cc");
map.put("4","dd");
}
return map;
}
}

  

2.调用程序

package com.jun.web.okhttp;

import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response; import java.io.IOException; public class GetHttp {
public static void main(String[] args) {
withoutHeader();
} public static void withoutHeader(){
String url="http://localhost:8080/ok/getInfo?type=18";
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();
Call call = client.newCall(request);
try{
Response response = call.execute();
System.out.println("get="+response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}

  效果:

  

3.request的请求头中添加参数

  被调用程序

package com.jun.web2forokhttp.okhttp;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import java.util.HashMap;
import java.util.Map; @RestController
public class GetReq {
/**
* 普通的get请求
* @param type
* @return
*/
@GetMapping("/ok/getInfo")
public Map getInfo(@RequestParam("type") String type){
Map map =new HashMap();
if("1".equals(type)){
map.put("1","aa");
map.put("2","bb");
}else {
map.put("3","cc");
map.put("4","dd");
}
return map;
} /**
* 参数从请求头中获取
* @param type
* @return
*/
@GetMapping("/ok/getMoreInfo")
public Map getMoreInfo(@RequestParam("type") String type, @RequestHeader("cjtoken") String cjToken){
Map map =new HashMap();
if("1".equals(type)){
map.put("1","aa");
map.put("2","bb");
map.put("cjtoken",cjToken);
}else {
map.put("3","cc");
map.put("4","dd");
map.put("cjtoken",cjToken);
} return map;
}
}

  

4.调用程序

package com.jun.web.okhttp;

import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response; import java.io.IOException; public class GetHttp {
public static void main(String[] args) {
// withoutHeader();
withHeader();
} /**
* 没有请求头的请求
*/
public static void withoutHeader(){
String url="http://localhost:8080/ok/getInfo?type=18";
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.header("cjtoken","8765095321")
.build();
Call call = client.newCall(request);
try{
Response response = call.execute();
System.out.println("get="+response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 有请求头的请求
*/
public static void withHeader(){
String url="http://localhost:8080/ok/getMoreInfo?type=18";
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.header("cjtoken","8765095321")
.build();
Call call = client.newCall(request);
try{
Response response = call.execute();
System.out.println("get="+response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}

  效果:

  

三:注意点

1.返回值

  string()只是其中之一。

  • onResponse回调有一个参数是response
    如果想获得返回的是字符串,可以通过response.body().string()
    如果获得返回的二进制字节数组,则调用response.body().bytes()
    如果想拿到返回的inputStream,则调response.body().byteStream()
    有inputStream我们就可以通过IO的方式写文件

  使用response.code()获取返回的状态码。如果成功,则是200.

2.header

  可以写多个header,添加多个值与健。

000 okhttp3的Get使用的更多相关文章

  1. 常用HTTP状态码和CURL 000问题

      最近在测试CDN服务质量问题,测试过程中返回了一些不同的状态码,当然有一些常用的,也有一些不常用的.最奇葩的是在使用curl命令的时候出现000状态码,问了很多同事,对这个000的反应跟新事物是的 ...

  2. Okhttp3的简单使用

    1.get请求: /** * *okhttp get请求 * */ public class MainActivity extends AppCompatActivity { private stat ...

  3. okhttp3 post 数据打包方法

    import okhttp3.OkHttpClient; import okhttp3.FormBody; import okhttp3.Request; import okhttp3.Request ...

  4. 60,000毫秒内对Linux的性能诊断效的方法

    转载于:http://www.itxuexiwang.com/a/liunxjishu/2016/0225/168.html?1456484140 60,000 毫秒内对 Linux 的性能诊断 当你 ...

  5. Retrofit2 + OkHttp3设置Http请求头(Headers)方法汇总

    在构建网络层时会遇到一个问题就是要手动配置Http请求的Headers,写入缓存Cookie,自定义的User-Agent等参数,但是对于有几十个接口的网络层,我才不想用注解配置Headers,目前网 ...

  6. [C#]循环输出 000 - 999999

    循环输出 000 - 999999 ; i < ; i++) { , i.ToString().Length); j < 7; j++) { Debug.WriteLine(i.ToStr ...

  7. okhttp3 get post 简单封装

    最近打算在新项目中使用 okhttp3, 简单封装了一下异步 get post 因为 CallBack 也是在子线程中执行,所以用到了 Handler public class MyOkHttpCli ...

  8. c++ string 结束符‘\000’

    昨天输出string类型时总是出错,发现输出到文件的一行里多了^@,输出到console却看不到,debug发现,string类型中多了\000,这主要由于我想要用\0截掉字符串最后一位,所以把字符串 ...

  9. okhttp3教程(1)如何引入库

    官网: https://github.com/square/okhttp https://github.com/square/okio 1,使用okhttp3需要两个库 在build.gradle c ...

随机推荐

  1. 使用kubeadm 新加入节点(原始token过期后)---转发

    kubeadm join kubeadm init 安装完成后你会得到以下的输出,使用join指令可以新增节点到集群,此token 有效期为24小时 You should now deploy a p ...

  2. javascript原生图片懒加载

    一,原生javascript图片懒加载 1. 使用方法,例如 // 要绑定的图片地址 <img data-src={url} alt=" "> 2. 在页面中引入下列原 ...

  3. 关于 ES5 & ES6 数组遍历的方法

    ES5 数组遍历方法 1.for 循环 , , , , ] ; i < arr.length; i++) { console.log(arr[i]) } 2.forEach , , , , ] ...

  4. [Reproduced] How to Improve Code Quality?

    How to Improve Code Quality? Ref: https://www.perforce.com/blog/sca/what-code-quality-and-how-improv ...

  5. 《CoderXiaoban》第八次团队作业:Alpha冲刺

    项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 实验十二 团队作业8:软件测试与ALPHA冲刺 团队名称 Coderxiaoban团队 作业学习目标 (1)掌握软件测试基 ...

  6. 各大公司Java面试题收录含答案(整理版)持续中....

    本文分为17个模块,分别是:Java基础.容器.多线程.反射.对象拷贝.Java web.异常.网络.设计模式.算法.Spring/Spring MVC.Spring Boot/Spring Clou ...

  7. 牛客小白月赛12 H 华华和月月种树

    题目链接: 题意:有三个操作 操作 1:表示节点 i 长出了一个新的儿子节点,权值为0,编号为当前最大编号 +1(也可以理解为,当前是第几个操作 1,新节点的编号就是多少). 操作 2:表示华华上线做 ...

  8. 02-Flutter移动电商实战-建立项目和编写入口文件

    环境搭建请参考之前写的一篇文章:Flutter_初体验_创建第一个应用 1.创建项目 采用AndroidStudio构建本项目,FIle>New>New Flutter Project… ...

  9. LeetCode 731. My Calendar II

    原题链接在这里:https://leetcode.com/problems/my-calendar-ii/ 题目: Implement a MyCalendarTwo class to store y ...

  10. Windbg命令脚本流程控制语句详解

    在Windbg命令脚本一文里,我们介绍了命令脚本语言的的组成要素,在本文里将对语句进行展开的讲解.这些语句主要是流程控制的语句,比如我们常见的条件分子和循环语句等. ; (命令分隔符) 分号(:)字符 ...